二叉树遍历的本质

我们以递归调用为例

 

code

void OrderTraverse(BinartTree bt)
{


//	这里是先序遍历
  //printf("%d\n",bt->data); 
	
	if(bt->LT)
	OrderTraverse(bt->LT);

//  这里是中序遍历
  //printf("%d\n",bt->data);

	if(bt->RT)
	OrderTraverse(bt->RT);

//	这里是后序遍历
  //printf("%d\n",bt->data);

	
}

我们看到,这里面遍历顺序取决于 printf 函数的位置,

但是,printf 这个函数只是 遍历过程中的操作 ,我们忽略 printf 这个函数。

当我们规定好左子树先于右子树的时候,实际遍历的顺序就已经确定了,显然,没有节点就没有子树,所以遍历的顺序是 根节点 左子树 右子树

用图来体现这个遍历过程

这里写图片描述

 如图所示,在遍历过程中,对于每个节点来说有三个时期,就是

  1. 第一次遇见该节点
  2. 遍历完该节点的左子树后
  3. 遍历完该节点的右子树后 

显然当我们的遍历操作(例如文章首的例子中的 printf )在1时期时,就是先序遍历,在2、3时期时则分别是中序遍历、后序遍历。

由此,我们对于二叉树的遍历算法实现的认识就更加清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值