zoukankan      html  css  js  c++  java
  • 145. 二叉树的后序遍历

    给定一个二叉树,返回它的 后序 遍历。

    示例:

    输入: [1,null,2,3]  
       1
        
         2
        /
       3 
    
    输出: [3,2,1]
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    方式一:递归

    后序遍历:按照访问左子树——右子树——根节点的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。

    class Solution {
        private List<Integer> list = new ArrayList<>();
        public List<Integer> postorderTraversal(TreeNode root) {
            postOrder(root);
            return list;
        }
    
        public void postOrder(TreeNode node){
            if(node==null) return;
            //list.add(node.val);//先序
            postOrder(node.left);
            //list.add(node.val);//中序
            postOrder(node.right);
            list.add(node.val);//后序
        }
    }
    

    方法二:迭代(官方题解)

    我们也可以用迭代的方式实现方法一的递归函数,两种方式是等价的,区别在于递归的时候隐式地维护了一个栈,而我们在迭代的时候需要显式地将这个栈模拟出来,其余的实现与细节都相同,具体可以参考下面的代码。

    class Solution {
        public List<Integer> postorderTraversal(TreeNode root) {
            List<Integer> res = new ArrayList<Integer>();
            if (root == null) {
                return res;
            }
    
            Deque<TreeNode> stack = new LinkedList<TreeNode>();
            TreeNode prev = null;
            while (root != null || !stack.isEmpty()) {
                while (root != null) {
                    stack.push(root);
                    root = root.left;
                }
                root = stack.pop();
                if (root.right == null || root.right == prev) {
                    res.add(root.val);
                    prev = root;
                    root = null;
                } else {
                    stack.push(root);
                    root = root.right;
                }
            }
            return res;
        }
    }
    
  • 相关阅读:
    “随手记”APP与已经发布的记账软件“鲨鱼记账”的差距
    团队绩效打分
    “随手记”改进方案
    “随手记”第一阶段成果展示
    “随手记”意见整理
    针对每个团队的项目意见或建议
    “随手记”开发记录day10
    团队十日冲刺8
    团队十日冲刺7
    团队十日冲刺6
  • 原文地址:https://www.cnblogs.com/junlinsky/p/13751089.html
Copyright © 2011-2022 走看看