概述
Binary Tree Postorder Traversal(二叉树后序遍历)
【难度:Medium】
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?
使用迭代而不是递归的方法后序遍历二叉树
解题思路
整体思路与LeetCode 94题和144题一致,但在后序遍历这里采取的是先走根节点,再走右子树,再走左子树,最后将结果顺序反转来得到后序遍历的答案,因为这样比较方便。
c++代码如下:
//迭代方法
/**
* 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> v;
stack<TreeNode*> s;
TreeNode* cur = root;
while (cur || !s.empty()) {
if (cur) {
s.push(cur);
v.push_back(cur->val);
cur = cur->right;
} else {
cur = s.top()->left;
s.pop();
}
}
reverse(v.begin(),v.end());
return v;
}
};
//递归方法
/**
* 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> v;
if (!root)
return v;
vector<int> left = postorderTraversal(root->left);
if (!left.empty()) {
for (auto i:left)
v.push_back(i);
}
vector<int> right = postorderTraversal(root->right);
if (!right.empty()) {
for (auto i:right)
v.push_back(i);
}
v.push_back(root->val);
return v;
}
};
最后
以上就是热情龙猫为你收集整理的[LeetCode]145 二叉树后序遍历的全部内容,希望文章能够帮你解决[LeetCode]145 二叉树后序遍历所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复