二叉树的前序遍历的非递归算法(二)

本文介绍了一种更易于理解的二叉树前序遍历的非递归算法,通过使用堆栈实现了遍历过程,避免了复杂的递归逻辑。

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

在二叉树的前序遍历的非递归算法(一)中使用的算法是比较烦的,下面介绍一下较简单点的算法,理解起来更容易。

前序遍历是先遍历根结点,然后分别是左、右结点,对于左右子树使用同样的思想,那么我们可以使用一个堆栈,一开始将根结点压入堆栈,然后开始循环,先将堆栈顶元素弹出,然后访问,然后依次将其右结点和左结点压入堆栈,注意是先右后左而不是先左后右。此过程直到堆栈为空。

 

算法实现如下:

  1. void preOrderIter(struct node *root)  
  2. {  
  3.     if (root == NULL) return;  
  4.     stack<struct node *> s;  
  5.     s.push(root);  
  6.     while (!s.empty()) {  
  7.         struct node *nd = s.top();  
  8.         cout << nd->data << " ";  
  9.         s.pop();  
  10.         if (nd->right != NULL)  
  11.             s.push(nd->right);  
  12.         if (nd->left != NULL)  
  13.             s.push(nd->left);  
  14.     }  
  15.     cout << endl;  
  16. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值