zoukankan      html  css  js  c++  java
  • [leetcode]Binary Tree Inorder Traversal

    二叉树的中序遍历非递归版本,采用的是wiki百科上的办法。果然简洁,而且和先序有异曲同工之妙,先序只用push右节点,中序只用push中节点。除此之外还有个更改TreeNode加一个visited的bool值的办法就不表了。http://discuss.leetcode.com/questions/23/binary-tree-inorder-traversal 这个链接里面有个长长的讨论。后序遍历据说比较难,就先不学了,哪个面试官会这么变态出后序遍历么!!无堆栈版本的遍历也先不学了,有空多写先序和中序,要记熟了。

    写的时候仍然要看图,不要光背,思路是:
    1.当前节点一直是要处理的节点;
    2.不停向左子树方向走,并push本节点;
    3.走不下去了(null),就从栈中取刚才那个节点,打印,并变当前节点为右节点。

    public class Solution {
        public ArrayList<Integer> inorderTraversal(TreeNode root) {
            ArrayList<Integer> ans = new ArrayList<Integer>();
            Stack<TreeNode> stack = new Stack<TreeNode>();
            TreeNode n = root;
            while (n!= null || !stack.empty()) {
                if (n!= null) {
                    stack.push(n);
                    n = n.left;
                }
                else {
                    n = stack.pop();
                    ans.add(n.val);
                    n = n.right;
                }
            }
            return ans;
        }
    }
    

      

  • 相关阅读:
    XML 验证器
    XML 浏览器支持
    XML 元素
    查看 XML 文件
    XML 属性
    Android入门之Activity四种启动模式
    XML 简介
    XML 语法规则
    [Android]Thread线程入门3多线程
    XML 验证
  • 原文地址:https://www.cnblogs.com/lautsie/p/3261119.html
Copyright © 2011-2022 走看看