码迷,mamicode.com
首页 > 其他好文 > 详细

Binary Tree Postorder Traversal

时间:2014-04-29 19:22:59      阅读:404      评论:0      收藏:0      [点我收藏+]

标签:des   com   http   class   blog   style   div   img   code   java   size   

Problem:

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

For example:

Given binary tree {1, #, 2, 3},

return [3, 2, 1]

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

分析:

后序遍历的访问顺序是“左右中”,先遍历左子树、右子树,后遍历根节点。思路基本与先序遍历一致,需要借助堆栈。但是根节点是最后遍历的,所以遍历左子树、右子树时候,只做压栈的操作,不将节点加入遍历序列中。将节点加入遍历序列的条件是当前判断的栈顶的元素,没有右子树,或者右子树的根节点是其前驱(代码的第14行)。将根节点访问完后才将其弹出堆栈(代码的第16行)。

mamicode.com,码迷
 1 class Solution {
 2 public:
 3     vector<int> postorderTraversal(TreeNode *root) {
 4         vector<int> result;
 5         stack<TreeNode *> stk;
 6         TreeNode *p = root;
 7         while(p != NULL) {
 8             stk.push(p);
 9             p = p->left;
10         }
11         
12         while(!stk.empty()) {
13             TreeNode *top = stk.top();
14             if(top->right == NULL || result.size() > 0 && top->right->val == result.back()) {
15                 result.push_back(top->val);
16                 stk.pop();
17             } else {
18                 TreeNode *p = top->right;
19                 while(p != NULL) {
20                     stk.push(p);
21                     p = p->left;
22                 }
23             }
24         }
25         return result;
26     }
27 };
mamicode.com,码迷

 

Binary Tree Postorder Traversal,码迷,mamicode.com

Binary Tree Postorder Traversal

标签:des   com   http   class   blog   style   div   img   code   java   size   

原文地址:http://www.cnblogs.com/foreverinside/p/3698000.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!