遍历二叉树的递归实现

遍历二叉树之前,需要先熟悉二叉树的特点。

非空二叉树的特殊性:左右子树有序、每个节点的结构相同(根节点和左右分支,左右分支可能为空)、完全二叉树的节点编号的特殊规律。

遍历的实现思路:递归实现、非递归实现。按照中序遍历举例进行对比。

解释:中序遍历  (或称为中根遍历,比较好理解)按照从左子树向右子树的顺序。先遍历左子树、中间遍历根节点、后遍历右子树)


  • 递归实现

个人观点:递归算法,只要你想明白了二叉树基本构成元素的抽象性、理解了递归就是针对相同结构的不断调用知道最后一层,那么代码写起来就相当简洁,但是如果你不理解就很难言传(只可意会,我也是不写代码了以后才研究懂,开慧甚晚~)。

某个二叉树如下

这个二叉树的基本构成元素可以看成如下的拆分

虚线的部分代表这个分支的线是虚拟出来的,因为它的下级没有实际的节点。

通过以上的画图可以看出,二叉树的基本构成元素就是集合{节点,左分支线,右分支线},那么遍历整个树可以拆解成遍历每个基本构成元素,所以递归遍历便是用了这种结构。

递归遍历二叉树的核心思想:中序遍历左子树、中序遍历根节点、中序遍历右子树。遍历左子树的时候,又会在每一层按遍历左子树、根节点、右子树的顺序进行…。

做法:定义二叉树为 BTree类型,中序遍历的函数名为inOrderTree。

//定义二叉树
typedef struct BTree{
 DataType data;
 BTree *Lchild,*Rchild;
}

//中序遍历
void InOrderTree(BTree T){
if(T != Null){//非空树
 InOrder(T->Lchild);
 Visit(T);
 InOrder(T->Rchild);
              }
}

  • 非递归实现:见下一篇吧~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值