给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [3,2,1]
迭代:(与前序遍历相反,得到根之后,左节点先入栈,右节点后入栈,再将结果反转)
(左右根)
1、把根节点push到栈中
2、循环检测栈是否为空,若不空,则取出栈顶元素,保存其值(根)
3、看其左子节点是否存在,若存在则push到栈中(先放入左节点,后面再处理)
4、看其右子节点,若存在,则push到栈中(放入右节点,得到右)
5、得到的结果需反转,循环
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> ret;
stack<TreeNode*> stack1;
if(root==NULL)
return ret;
stack1.push(root);
while(!stack1.empty()){
TreeNode* node = stack1.top();
stack1.pop();
if(node->left!=NULL)
stack1.push(node->left);
if(node->right!=NULL)
stack1.push(node->right);
ret.push_back(node->val);
}
reverse(ret.begin(), ret.end());
return ret;
}
};