相关问题
144. Binary Tree Preorder Traversal
94. Binary Tree Inorder Traversal
145. Binary Tree Postorder Traversal
Discription
Given a binary tree, return the postorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,2,3].
思路
方法一
树的后序遍历比较复杂
先遍历左子树,第一次返回根节点;
再遍历右子树,第二次返回根节点;
所以需要变量记录当前状态,是在访问左子树还是在访问右子树。
时间复杂度:
?
空间复杂度:
代码
代码
/**
* 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> res;
vector<TreeNode*> sta;
bool forward = true; //访问左子树
TreeNode *preVisited = NULL;
if (root) sta.push_back(root);
while (!sta.empty())
{
while (sta.back()->left && forward) sta.push_back(sta.back()->left);
forward = false;
if (!sta.back()->right || sta.back()->right == preVisited)
{
// 右节点已经访问过了
res.push_back(sta.back()->val);
preVisited = sta.back();
sta.pop_back();
}
else
{
sta.push_back(sta.back()->right);
forward = true;
}
}
return res;
}
};