[LeetCode] Binary Tree Postorder Traversal
来源:互联网 发布:单片机蜂鸣器实验报告 编辑:程序博客网 时间:2024/05/20 01:12
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、用递归做很简单,先遍历左孩子,再遍历右孩子,然后遍历父节点。代码如下:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> postorderTraversal(TreeNode *root) { vector<int> result; postOrder(root, result); return result; } void postOrder(TreeNode *node, vector<int>& result){ if(node==NULL){ return; } postOrder(node->left, result); postOrder(node->right, result); result.push_back(node->val); }};
2、但是题目要求不能用递归。此前学长跟我说,若递归改成非递归,无非就是用栈或者队列存储中间结果。这里我们用栈来存储中间结果。注意到,先遍历的后进栈,因此,最先进栈的是父节点,然后是右孩子,最后是左孩子。这里我们需要两个栈,一个存储左孩子栈,一个存储最终结果栈。代码如下:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> postorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode*> s; //最终结果栈 stack<TreeNode*> sLeftNode; //左孩子栈 TreeNode* node=root; while(node!=NULL||!sLeftNode.empty()){ if(node!=NULL){ s.push(node); if(node->left!=NULL){ sLeftNode.push(node->left); } node=node->right; }else{ node=sLeftNode.top(); sLeftNode.pop(); } } while(!s.empty()){ node=s.top(); result.push_back(node->val); s.pop(); } return result; }};
0 0
- LeetCode Binary Tree Postorder Traversal
- LeetCode:Binary Tree Postorder Traversal
- Leetcode: Binary Tree Postorder Traversal
- Leetcode: Binary Tree Postorder Traversal
- LeetCode:Binary Tree Postorder Traversal
- Leetcode Binary Tree Postorder Traversal
- [LeetCode]Binary Tree Postorder Traversal
- [LeetCode] Binary Tree Postorder Traversal
- leetcode Binary Tree Postorder Traversal
- 【LeetCode】Binary Tree Postorder Traversal
- LeetCode | Binary Tree Postorder Traversal
- Leetcode: Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal - LeetCode
- LeetCode - Binary Tree Postorder Traversal
- [LeetCode]Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal -- LeetCode
- [LeetCode]Binary Tree Postorder Traversal
- 【LeetCode】Binary Tree Postorder Traversal
- Plus One--LeetCode
- 使用MongoDB的ORM版Mongose来写你的数据操作吧!
- 2000年清华大学计算机研究生机试真题
- 教你如何使用搜索引擎批量检测网站注入点
- head 详解
- [LeetCode] Binary Tree Postorder Traversal
- Google: RateLimit
- C++中二维数组作为函数参数
- hadoop-2.6.0单机配置和伪分布式配置
- 我的Android入门之路:一、初步接触之GreenDAO学习使用体验
- linux磁盘分区fdisk命令详解
- 关于C++中的vector的认识
- iOS7IPAD开发屏幕旋转显示不同宽度
- [BZOJ 1901][ZOJ 2112]Dynamic Rankings(树状数组套主席树、动态区间第k大值查询)