problem:
Given a binary tree, return the postorder traversal of its nodes‘ values.
For example:
Given binary tree {1,#,2,3}
,
1 2 / 3
return [3,2,1]
.
Note: Recursive solution is trivial, could you do it iteratively?
Hide Tags
题意:非递归后续遍历二叉树
thinking:
(1)非递归后续遍历二叉树的方法比较抽象,要借助两个stack
(2)采用双stack倒换,第一个stack出一次栈,将两个孩子(先左后右)入栈,出栈的节点保存到第二个stack。对第二个stack依次出栈即得到后续遍历的结果。
code:
class Solution { public: vector<int> postorderTraversal(TreeNode* root) { stack<TreeNode *> input; stack<TreeNode *> output; vector<int> ret; if(root==NULL) return ret; TreeNode *node = root; input.push(node); while(!input.empty()) { node=input.top(); input.pop(); output.push(node); if(node->left!=NULL) input.push(node->left); if(node->right!=NULL) input.push(node->right); } while(!output.empty()) { node=output.top(); output.pop(); ret.push_back(node->val); } return ret; } };
时间: 2024-10-15 21:45:33