zoukankan      html  css  js  c++  java
  • Binary Tree Preorder Traversal

    Binary Tree Preorder Traversal 

    问题:

    Given a binary tree, return the preorder traversal of its nodes' values.

    Recursive solution is trivial, could you do it iteratively?

    思路:

      栈的方法 弹出栈顶的时候 先加入有节点 再加入做节点 直到栈空

    我的代码:

    public class Solution {
        public List<Integer> preorderTraversal(TreeNode root) {
            List<Integer> list = new ArrayList<Integer>();
            if(root == null)    return list;
            Stack<TreeNode> stack = new Stack<TreeNode>();  
            stack.push(root);
            do
            {
                TreeNode node = stack.pop();
                list.add(node.val);
                if(node.right != null)  stack.push(node.right);
                if(node.left != null)   stack.push(node.left);
            }while(!stack.isEmpty());
            return list;
        }
    }
    View Code

    他人代码:

    public class Solution {
        public List<Integer> preorderTraversal(TreeNode root) {
            Stack<TreeNode> stack = new Stack<TreeNode>();
            List<Integer> preorder = new ArrayList<Integer>();
            
            if (root == null) {
                return preorder;
            }
            
            stack.push(root);
            while (!stack.empty()) {
                TreeNode node = stack.pop();
                preorder.add(node.val);
                if (node.right != null) {
                    stack.push(node.right);
                }
                if (node.left != null) {
                    stack.push(node.left);
                }
            }
            
            return preorder;
        }
    }
    View Code

    学习之处:

    • 二叉树是有两个叉的树 二分查找树是满足左子树<节点<右子树 二叉平衡树 左子树和右子树的高度相差最大为1

    if(null == head) return new ArrayList<Integer>();
    List<Integer> preOrder = new ArrayList<Integer>();
    Stack<TreeNode> nodeStack = new Stack<TreeNode>();
    nodeStack.push(head);

    while(!nodeStack.isEmpty()){
    TreeNode curTopNode = nodeStack.pop();
    preOrder.add(curTopNode.val);
    if(null != curTopNode.right) nodeStack.push(curTopNode.right);
    if(null != curTopNode.left) nodeStack.push(curTopNode.left);
    }

    return preOrder;

  • 相关阅读:
    ListView自定义滑动条
    使用天天模拟器开发Android应用
    自定义对话框
    显示下载进度
    PullToRefresh的使用
    Cookie
    Servlet
    HTTP
    svn
    转:MAVEN常用命令
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4313339.html
Copyright © 2011-2022 走看看