首页 > 其他 > 详细

leetcode -- Binary Tree Postorder Traversal

时间:2014-08-14 19:30:29      阅读:257      评论:0      收藏:0      [点我收藏+]

历史不容假设

 [问题描述]

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?

非递归实现二叉树后续遍历

[解题思路]

说明:网络上好多相关的方法,但是基本上都使用的O(n)的空间来记录节点是否已经访问过,所以我再次特地列举此题算法,需要O(stack) + O(1) 空间复杂度

如果栈顶元素的孩子节点是刚刚访问过的节点,那么就说明孩子节点已经访问结束,出栈!

 1  std::vector<int> Solution::postorderTraversal(TreeNode *root)
 2  {
 3      std::vector<int> ans;
 4      std::stack<TreeNode*> pathStack;
 5      if (root == NULL)
 6         return ans;
 7      TreeNode *post = root;
 8      pathStack.push(root);
 9      while (!pathStack.empty()){
10         TreeNode* tmp = pathStack.top();
11         if (tmp->left == post || tmp->right == post || (tmp->left == NULL && tmp->right == NULL)){
12             ans.push_back(tmp->val);
13             pathStack.pop();
14             post = tmp;
15         }
16         else{
17             if (tmp->right != NULL) pathStack.push(tmp->right);
18             if (tmp->left != NULL) pathStack.push(tmp->left);
19         }
20      }
21  }

 

leetcode -- Binary Tree Postorder Traversal,布布扣,bubuko.com

leetcode -- Binary Tree Postorder Traversal

原文:http://www.cnblogs.com/taizy/p/3912902.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!