zoukankan      html  css  js  c++  java
  • 145 Binary Tree Postorder Traversal 二叉树的后序遍历

    给定一棵二叉树,返回其节点值的后序遍历。
    例如:
    给定二叉树 [1,null,2,3],
       1
       
         2
        /
       3
    返回 [3,2,1]。
    注意: 递归方法很简单,你可以使用迭代方法来解决吗?
    详见:https://leetcode.com/problems/binary-tree-postorder-traversal/description/

    Java实现:

    递归实现:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<Integer> postorderTraversal(TreeNode root) {
            List<Integer> res=new ArrayList<Integer>();
            if(root==null){
                return res;
            }
            return postorderTraversal(root,res);
        }
        private List<Integer> postorderTraversal(TreeNode root,List<Integer> res){
            if(root==null){
                return res;
            }
            postorderTraversal(root.left,res);
            postorderTraversal(root.right,res);
            res.add(root.val);
            return res;
        }
    }
    

    非递归实现:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<Integer> postorderTraversal(TreeNode root) {
            List<Integer> res=new ArrayList<Integer>();
            if(root==null){
                return res;
            }
            Stack<TreeNode> stk1=new Stack<TreeNode>();
            Stack<TreeNode> stk2=new Stack<TreeNode>();
            stk1.push(root);
            while(!stk1.isEmpty()){
                root=stk1.pop();
                stk2.push(root);
                if(root.left!=null){
                    stk1.push(root.left);
                }
                if(root.right!=null){
                    stk1.push(root.right);
                }
            }
            while(!stk2.isEmpty()){
                res.add(stk2.pop().val);
            }
            return res;
        }
    }
    
  • 相关阅读:
    51 Nod 1035 最长的循环节 (此题还不是很懂,日后再看)
    51 Nod 1101 换零钱(动态规划好题)
    51 Nod 1101 换零钱(动态规划好题)
    51 Nod 1163 最高的奖励
    51 Nod1042 数字0到9的数量
    51 Nod 1629 B君的圆锥
    iterrows(), iteritems(), itertuples()对dataframe进行遍历
    pandas计数 value_counts()
    scikit_learn逻辑回归类库
    Python中的深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8727353.html
Copyright © 2011-2022 走看看