二叉树的非递归遍历——前序

本文介绍了一种非递归方式实现二叉树的前序遍历算法,利用栈的特性来替代递归操作。首先将根节点入栈,然后进入循环:出栈节点并访问,若该节点存在右孩子则将其入栈,接着检查左孩子是否存在并入栈。通过这种方式实现了非递归的前序遍历。

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

**

二叉树的非递归遍历——前序

**
1.核心思想

①非递归,即必须要利用栈来实现;
②前序遍历的顺序为,先输出当前节点数据域的值,再输出其左子树上的值,其次为右子树;
③利用栈的先进后出,先将右子树存入,再将左子树存入,出栈时自然先左后右,将这个过程写入循环,即可实现非递归遍历;

2.代码
①结构体类型

typedef struct Node{
    int data;
    struct Node *left;
    struct Node *right;
}BTNode; 

②核心代码

void Forder(BTNode *root){//传入一颗二叉树
BTNode **S=(BTNode**)malloc(N*sizeof(BTNode*));//申请一段空间来存放节点,N为总节点个数(虽然用不完)
int top=-1;//栈顶指针初始化
BTNode *p;//接受出栈的节点
S[++top]=root;//先将根节点入栈
while(top!=-1){//当栈顶指针为-1时停止,这里也可用do while结构,个人喜好
p=S[top--];//前序遍历,先出栈
cout<<p->data<<"\t";
if(p->right) S[++top]=p->right;//先进后出,故先存右子女
if(p->left) S[++top]=p->left;
}
free(S);//最后将所申请的空间释放掉
} 

③主函数

int main(void){
        int Data[8]={3,2,5,8,4,7,6,9};
        BTNode *root=CreateTree(Data,8);//参考二叉搜素数的创建
        Forder(root);

}

3输出效果
这里写图片描述

有疑问欢迎留言讨论………..

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值