二叉树的先序遍历(非递归)

本文介绍了一种使用栈实现二叉树非递归先序遍历的方法,避免了递归带来的内存开销和耗时问题。文章详细阐述了算法步骤,并提供了完整的C代码示例。

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

虽然递归简单理解,但是用递归内存开销大,耗时长,性能往往不如非递归方式

所以这里通过栈,用非递归方法实现二叉树的先序遍历

二叉树的存储结构定义:

typedef struct node{
       int data;
       struct node * lchild; //指向左孩子的结点
       struct node * rchild; //指向右孩子的结点
   }BTNode;

思路:根 右 左,由于要使用栈,会和原本的不同

1,定义一个栈,定义初始化。
2.判断二叉树是否为空,不为空,则将根节点入栈。
3.当栈不为空时,循环。
3.1 退栈并访问该节点
3.2右孩子节点进栈
3.3左孩子节点进栈

C代码实现:

 void PreOrder1(BTNode * b){
       BTNode * St[Maxsize],*p; //定义一个栈,和一个存放根节点的指针变量
       int  top = -1; //初始化栈
       if(b != null){
           top++;
           St[top] = b;  //根节点进栈
           while(top > -1){
               p = St[top];
               top--;
               printf("%c",p->data); //退栈并访问根节点

               if(b->rchild != null){ //右孩子进栈
                   top++;
                   St[top] = p->rchild;
               }
               if(b->lchild != null){ //左孩子进栈
                   top++;
                   St[top] = p->lchild;
               }
           }   
       }
   }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值