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;
        }
        
    }
  • 相关阅读:
    网络适配器、网卡和网卡驱动
    PostgreSQL
    vsftp安装
    Ubuntu里面软件的安装与卸载
    ubuntu下查找某个文件的路径
    TCP的几个状态
    C++产生随机数
    ERROR Cannot determine the location of the VS Common Tools Folder
    小波变换C++实现(一)----单层小波变换
    离散卷积的计算
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3829631.html
Copyright © 2011-2022 走看看