zoukankan      html  css  js  c++  java
  • 94. Binary Tree Inorder Traversal

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

    For example:
    Given binary tree [1,null,2,3],

       1
        
         2
        /
       3
    

    return [1,3,2].

    Note: Recursive solution is trivial, could you do it iteratively?

    Show Company Tags
    Show Tags
    Show Similar Problems
     

    Recursive:

    public IList<int> InorderTraversal(TreeNode root) {
            var res = new List<int>();
            Recursive(root, res);
            return res;
            
        }
        public void Recursive(TreeNode root, IList<int> list)
        {
            if(root == null) return;
            if(root.left == null && root.right == null)
            {
                list.Add(root.val);
                return;
            }
            Recursive(root.left, list);
            list.Add(root.val);
            Recursive(root.right, list);
        }

    Iteration:

    此题的iteration的条件是最难把握的,因为如果每次stack push 左子树到底的时候,我们需要让loop的变量tree element指向该左元素的右子数。右子数可能为null, 此时就会跳出循环。解决方法是在循环条件里加上stack 不为空。只要不为空,则证明还有值需要iteration。

     public IList<int> InorderTraversal(TreeNode root) {
            var res = new List<int>();
            Stack<TreeNode> stack = new Stack<TreeNode>();
            
            while(root != null || stack.Count() >0)
            {
                while(root != null)
                {
                    stack.Push(root);
                    root = root.left;
                }
                var a = stack.Pop();
                res.Add(a.val);
                root = a.right;//cruz we have stack.Count() > 0 , no worry right is null
            }
            return res;
        }
  • 相关阅读:
    Matlab学习-(1)
    数据库事务是什么?
    Python解释器有哪些类型,有什么特点?
    Ajax向后台发送简单或复杂数据,后端获取数据的方法
    模态对话框被灰色阴影遮罩挡住的问题
    闭包
    Django——form表单
    Django中常用的正则表达式
    Django中装饰器的使用方法
    Django中自定义过滤器步骤
  • 原文地址:https://www.cnblogs.com/renyualbert/p/5860906.html
Copyright © 2011-2022 走看看