/*
* 算法思想:
* 使用两个栈,一个son stack一个root stack,其中son子节点,root用来存放父节点,
* 迭代过程为:
* 1. 每次从son stack中取出一个节点node, 压栈到root stack中去;
* 2. 将该节点node的全部孩子压栈到son stack;
* 4. 当son stack中有元素的话,一直将上述1-3过程循环下去,循环结束后,root stack中的元素即为结果;
* 5. 依次pop root stack中的元素,顺序即为后序遍历的结果。
*/
class Solution {
public:
//void _postorder(vector<int> *v, Node* root);
vector<int> _postorder(Node* root) {
int i, len;
Node* node = root;
vector<Node *> son, fa;
vector<int> ret;
if(!root) return ret;
son.push_back(node);
while(son.size()) {
node = son[son.size()-1];
son.pop_back();
fa.push_back(node);
len = node->children.size();
for(i=0; i<len; i++){
son.push_back(node->children[i]);
}
}
while(fa.size()) {
node = fa[fa.size()-1];
fa.pop_back();
ret.push_back(node->val);
}
return ret;
}
vector<int> postorder(Node* root) {
return _postorder(root);
}
};
leetcode-590. N叉树的后序遍历-C语言with class
最新推荐文章于 2022-05-08 00:06:44 发布