[存档] 非递归后根遍历二叉树

本文介绍了一种非递归实现二叉树后序遍历的方法。通过使用栈来辅助实现,该算法可以有效地跟踪节点的访问顺序,并确保在访问完左右子节点后才访问根节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 

 

 1 void NonRecursive_PostOrderTraversal(TreeNode *root){
 2     if(!root){
 3         cout<<"Empty tree"<<'\n';
 4         return;
 5     }
 6     stack<TreeNode *> s;
 7     TreeNode *cur = root;
 8     TreeNode *prev = root;
 9     s.push(root);
10     while(!s.empty()){
11         if(cur->Left && prev != cur->Left && prev != cur->Right){
12                 s.push(cur->Left); 
13                 prev = cur; 
14                 cur = cur->Left;
15                 continue//如果有左子树且从未访问过,先访问左子树
16         }
17         if(cur->Right && prev !=cur->Right){
18             s.push(cur->Right); 
19             prev = cur; 
20             cur = cur->Right;
21         }else{
22             cout<<cur->Value<<"";
23             prev = cur; 
24             s.pop(); 
25             if(!s.empty()){
26                 cur = s.top(); 
27             }
28         }
29     }
30     cout<<"end"<<'\n';
31 }

 

转载于:https://www.cnblogs.com/k330/archive/2011/07/03/Cpp_NonRecursive_BinTree_PostOrderTraversal.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值