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

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

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3
    

    return [3,2,1].

    https://oj.leetcode.com/problems/binary-tree-postorder-traversal/

    思路1:递归实现。

    思路2:迭代实现。

    public class Solution {
        public ArrayList<Integer> postorderTraversal(TreeNode root) {
            ArrayList<Integer> result = new ArrayList<Integer>();
            if (root == null)
                return result;
            postTravel(root, result);
            return result;
        }
    
        private void postTravel(TreeNode node, ArrayList<Integer> result) {
            if (node.left != null)
                postTravel(node.left, result);
            if (node.right != null)
                postTravel(node.right, result);
            result.add(node.val);
        }
    
        public static void main(String[] args) {
            TreeNode root = new TreeNode(1);
            root.right = new TreeNode(2);
            root.right.left = new TreeNode(3);
    
            System.out.println(new Solution().postorderTraversal(root));
        }
    
    }

    第二遍记录: 直接在递归函数里判断是否为null。

    public class Solution {
        public List<Integer> postorderTraversal(TreeNode root) {
            List<Integer> res = new ArrayList<Integer>();
            postOrder(root,res);
            return res;
        }
        
        private void postOrder(TreeNode root, List<Integer> res){
            if(root!=null){
                postOrder(root.left,res);
                postOrder(root.right,res);
                res.add(root.val);
            }
            
        }
        
    }

    非递归实现,需要2个stack。

    public class Solution {
        public List<Integer> postorderTraversal(TreeNode root) {
            List<Integer> res = new ArrayList<Integer>();
            if(root==null)
                return res;
            Stack<TreeNode> stack = new Stack<TreeNode>();
            Stack<Integer> reversedRes = new Stack<Integer>();
            stack.push(root);
            while(!stack.isEmpty()){
                TreeNode out = stack.pop();
                reversedRes.push(out.val);
                if(out.left!=null)
                    stack.push(out.left);
                if(out.right!=null)
                    stack.push(out.right);
                    
            }
            while(!reversedRes.isEmpty()){
                res.add(reversedRes.pop());
            }
            
            return res;
        }
        
    }
  • 相关阅读:
    什么是架构
    jenkins权限插件配置
    解决Error response from daemon: oci runtime error: container_linux.go:247: starting container process
    解决“/tmp/crontab bad minute”问题
    yml链接mysql路径serverTimezone=UTC的那些坑
    java请求头导致特殊字符为空问题
    使用ssh连接WSL
    系统设计与任务分配
    需求规格说明书
    选题报告
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3829631.html
Copyright © 2011-2022 走看看