LeetCode 145 Binary Tree Postorder Traversal
2015-06-13 14:26
302 查看
题目
递归分析
如果用递归的方法则要解决这么两个问题:1.如果 f(root)可以得到整个树的后序遍历,那么f(root-left)就能得到左子树的后序,那么也可以得到右子树的后序
左子树的后序 + 右子树的后序 + 根结点即可得到结果。
2. 不可能一直向下递归下去,终止条件:当遍历到叶结点是应该怎么处理。
当遍历叶节点的左子树或右子树时,为空。此时返回空数组即可。叶子结点向上返回 空 + 空 + 叶子结点值 = 叶子结点值
递归题解
/** * Definition for a binary tree node. * 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> value; if(root == NULL) return value; vector<int> left = postorderTraversal(root->left); vector<int> right = postorderTraversal(root->right); for(int i=0;i<left.size();i++) value.push_back(left[i]); for(int i=0;i<right.size();i++) value.push_back(right[i]); value.push_back(root->val); return value; } };
非递归分析
后序遍历是 左 - 右 - 上 的遍历方式。可以逆着这个方向从上到下进行,将遍历的到的元素也逆向加入数组即可。
非递归题解
/** * Definition for a binary tree node. * 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> value; vector<TreeNode*> tree; if(root == NULL) return value; tree.push_back(root); while(!tree.empty()){ TreeNode *temp = tree.front(); tree.erase(tree.begin()); value.insert(value.begin(),temp->val); if(temp->left != NULL) tree.insert(tree.begin(),temp->left); if(temp->right != NULL) tree.insert(tree.begin(),temp->right); } return value; } };
之所以用 insert将子结点插入在兄弟结点之前是因为反向遍历中,子节点的优先度更高。
相关文章推荐
- Sprite Kit Swift游戏开发新手指导手册(4)
- mac下androidstudio下ndk开发简单操作流程
- android5.0(Lollipop) BLE Central牛刀小试
- ios-块(MS)
- WordCount运行详解
- 鸟哥的linux私房菜学习笔记 ---第7章-2
- CSS3基础选择器
- XenApp_XenDesktop_7.6实战篇之八:申请及导入许可证
- 黑马程序员——数组
- 推荐系统之矩阵分解及C++实现
- Leetcode: Rotate List
- 那段張狂的少女年月
- 学习笔记(objective-c)-继承
- 推荐系统之基于二部图的个性化推荐系统原理及C++实现
- Tomcat的Manager显示403 Access Denied
- Tomcat的Manager显示403 Access Denied
- 字符串处理/贪心 Codeforces Round #307 (Div. 2) B. ZgukistringZ
- HTML表单的提交
- 搭建hadoop集群环境
- 水题 Codeforces Round #307 (Div. 2) A. GukiZ and Contest