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].

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

注意:下面是迭代的解法。理解有点困难,和大家讨论一下。

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 import java.util.Stack;
 4
 5 /**
 6  * Definition for binary tree public class TreeNode { int val; TreeNode left;
 7  * TreeNode right; TreeNode(int x) { val = x; } }
 8  */
 9 public class TreeNodeNoneReverse {
10     List<Integer> postOrder = new ArrayList<Integer>();
11
12     public List<Integer> postorderTraversal(TreeNode root) {
13         // 非递归实现后序遍历
14         TreeNode tempTree = root;
15         Stack<TreeNode> stack = new Stack<TreeNode>();
16         while (root != null) {
17             // 左子树入栈
18             for (; root.left != null; root = root.left) {
19                 System.out.println("左子树入栈:" + root.val);
20                 stack.push(root);
21             }
22             // 当前节点无右子或右子已经输出
23             while (root != null
24                     && (root.right == null || root.right == tempTree)) {
25                 System.out.println("add list:" + root.val);
26                 postOrder.add(root.val);
27                 tempTree = root;// 记录上一个已输出节点
28                 System.out.println("上一个已输出的节点:"+tempTree.val);
29                 if (stack.empty()) {
30                     System.out.println("stack is empty.");
31                     return postOrder;
32                 }
33                 root = stack.pop();
34                 System.out.println("右子树出栈:" + root.val);
35             }
36             // 处理右子
37             System.out.println("处理右子入栈:" + root.val);
38             stack.push(root);
39             root = root.right;
40         }
41         System.out.println("可能运行到这儿么?");
42         return postOrder;
43     }
44
45     public static void main(String[] args) {
46         TreeNode t1 = new TreeNode(1);
47         TreeNode t2 = new TreeNode(2);
48         TreeNode t3 = new TreeNode(3);
49         TreeNode t4 = new TreeNode(4);
50         TreeNode t5 = new TreeNode(5);
51         TreeNode t6 = new TreeNode(6);
52         t3.setLeft(t2);
53         t3.setRight(t1);
54         t2.setLeft(t4);
55         t2.setRight(t5);
56         t1.setRight(t6);
57         System.out.println(new TreeNodeNoneReverse().postorderTraversal(t3));
58     }
59 }
60   

LeetCode解题报告:Binary Tree Postorder Traversal

时间: 2024-08-04 03:31:52

LeetCode解题报告:Binary Tree Postorder Traversal的相关文章

【leetcode】145. Binary Tree Postorder Traversal

题目如下: 解题思路:凑数题+3,搞不懂为什么本题的难度是Hard,而[leetcode]590. N-ary Tree Postorder Traversal是Medium. 代码如下: # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solutio

【LeetCode】145. Binary Tree Postorder Traversal 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51494797 Subject 出处:https://leetcode.com/problems/binary-tree-postorder-traversal/ Hard 级别 Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree

leetcode || 145、Binary Tree Postorder Traversal

problem: 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]. Note: Recursive solution is trivial, could you do it iteratively? Hide Tags Tree Stack 题意:非递归后续遍历二叉树

Leetcode bfs&amp;dfs Binary Tree Postorder Traversal II

Binary Tree Level Order Traversal II Total Accepted: 16983 Total Submissions: 54229My Submissions Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root). For ex

Leetcode bfs&amp;dfs Binary Tree Postorder Traversal

Binary Tree Level Order Traversal Total Accepted: 20571 Total Submissions: 66679My Submissions Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example: Given binary tree {3,9,2

&lt;LeetCode OJ&gt; 145. Binary Tree Postorder Traversal

在此之前回顾前序遍历和中序遍历: 1,前序遍历: 基本规则,总是先访问根节点在左节点,在右节点 递归解法: class Solution { public: vector<int> result; vector<int> preorderTraversal(TreeNode* root) { if(root){ result.push_back(root->val); preorderTraversal(root->left); preorderTraversal(ro

LeetCode: Binary Tree Postorder Traversal 解题报告

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    /   3return [3,2,1]. Note: Recursive solution is trivial, could you do it iteratively

[Leetcode][Tree][Binary Tree Postorder Traversal]

二叉树的后续遍历 1.递归版本 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void dfsPostorderTraversal(TreeNode *now, vec

【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]. Note: Recursive solution is trivial, could you do it iteratively? 思路:后序遍历比起先序遍历以及中序遍历要稍微复杂一点,可以考虑用两个stack进行操作,