//后序遍历(递归)
void postTraverse(TreeNode* node){
if (node){
postTraverse(node->left);
postTraverse(node->right);
cout << node->val << endl;
}
}
//后序遍历(非递归)
void postTraverse2(TreeNode* node){
if (node == NULL)
cout << "empty!" << endl;
else{
stack<TreeNode*> s;
stack<int> v; // 因为有些结点需要访问两次,所以设置一个标志位
while (node){
s.push(node);
v.push(0);
root = root->left;
}
while (!s.empty()){
root = s.top();
while (root->right && v.top() == 0){ //v.top() == 0 表示访问了一次
v.pop();
v.push(1);
root = root->right;
s.push(root);
v.push(0);
while (root->left){
s.push(root->left);
v.push(0);
root = root->left;
}
}
root = s.top();
cout << root->val << endl;
s.pop();
v.pop();
}
}
}
二叉树后序遍历递归与非递归实现
最新推荐文章于 2022-07-30 16:08:18 发布