LeetCode 145 Binary Tree Postorder Traversal
来源:互联网 发布:淘宝好看的女包店铺 编辑:程序博客网 时间:2024/06/04 18:28
题目
递归分析
如果用递归的方法则要解决这么两个问题:
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将子结点插入在兄弟结点之前是因为反向遍历中,子节点的优先度更高。
0 0
- LeetCode(145)Binary Tree Postorder Traversal
- LeetCode: Binary Tree Postorder Traversal [145]
- LeetCode 145 Binary Tree Postorder Traversal
- LeetCode 145 Binary Tree Postorder Traversal
- leetcode || 145、Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal - LeetCode 145
- Leetcode[145]-Binary Tree Postorder Traversal
- LeetCode 145 Binary Tree Postorder Traversal
- leetcode(145):Binary Tree Postorder Traversal
- leetcode-145-Binary Tree Postorder Traversal
- [Leetcode 145, Hard] Binary Tree Postorder Traversal
- leetcode[145]:Binary Tree Postorder Traversal
- [leetcode-145]Binary Tree Postorder Traversal(c++)
- Leetcode #145 Binary Tree Postorder Traversal
- LeetCode 145 : Binary Tree Postorder Traversal
- LeetCode 145: Binary Tree Postorder Traversal
- 【LEETCODE】145-Binary Tree Postorder Traversal
- LeetCode 145 Binary Tree Postorder Traversal
- 面试经验之-----埃森哲(Accenture)
- PHP的几种设计模式
- 一个makefile简单例子
- Exception starting filter struts2 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUti
- GoGo Tester 2.3.9详细使用教程
- LeetCode 145 Binary Tree Postorder Traversal
- lucas定理
- 【c#第六次作业】猜猜看游戏
- SpringMVC学习(四)
- 给QT 程序的EXE文件添加图标
- LeetCode——House Robber
- 【C语言】字符串右循环移位
- TCP头部解析
- 信号量、互斥体和自旋锁