二叉搜索树 先序|前序遍历递归和非递归(c程序干货满满)

嗨~ 答应你们的非递归遍历来咯

首先嘛 先序(前序)的打印顺序是 根左右

           中序  打印顺序是  左根右

所有对于

递归 代码就很简单

void print3(struct node*root)
{
	if(root!=NULL)
	{
		printf("%d\t",root->data);  //打印  (根)
		print3(root->left);   //传节点左边   (左)
		print3(root->right);  //传节点右边   (右)
	}
 }

递归就是反复的调用自己代码哼简单 但是理解就有点。。。。

 

非递归 理解很容易

//先序遍历 非递归
void print2(struct node*root)
{
	struct node*a[20];     //建立一个结构体数组 
	struct node*pnode=root;  //然后定义一个结构体指针好做下面的操作 
	int i=-1;     // 定义一个 结构体数组的下标  让i=-1是为了 给下面操作做铺垫 
	while(pnode||i!=-1)  
	{
		while(pnode)  //当节点不为空 
		{
			a[++i]=pnode;   // 入栈 为什么是++i 因为i刚开始是=-1 
			printf("%d\t",pnode->data);
			pnode=pnode->left;// 向它左边走 
		}
		if(i!=-1)  // 无路可走的时候 
		{
			pnode=a[i--];  //出栈 
			pnode=pnode->right;// 向右边走 
		}
	}	
}

非递归就是出栈入栈的问题

  • 50这个节点   入栈   在  打印   然后  向左  走到30这个节点
  • 30这个节点  入栈    在   打印  然后  向左  走到20这个节点
  • 20这个节点  入栈    在   打印  然后  向左  走到黑色()节点
  • 空节点 出栈 到  20这个节点
  • 判断20这个节点的右子树空嘛空 出栈  不为空 向右走在重复 入栈,打印,向左

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiexiexiexieqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值