二叉树基本操作

本文介绍了二叉树的基本操作,包括定义、建立和遍历。重点讲述了先序、中序和后序遍历的递归与非递归实现,讨论了如何避免节点的重复访问并确保正确的遍历顺序。
摘要由CSDN通过智能技术生成

一.二叉树的定义

二.二叉树的建立

定义一棵无数据的二叉树:

  6 int left[SIZE];
  7 int right[SIZE];
为了操作简便,我们定义一棵不需要存储数据的二叉树,只要能存储节点之间的逻辑关系就行,所以用两个数组来表示。

left[i],第i个节点的左子节点的序号

right[i],第i个节点的右子节点的序号

若left[i] == -1表示第i个节点没有左子节点

若right[i] == -1表示第i个节点没有右子节点

先建立一棵二叉树。

1.创建根节点

2.若果要,创建左子树

3.若果要,创建右子树

  8 int createTree()
  9 {
 10         int index;
 11         scanf("%d",&index);
 12         if(index == -1)
 13         {
 14                 return -1;
 15         }
 16         left[index] = createTree();
 17         right[index] = createTree();
 18         return index;
 19 }
输入-1表示该节点为空,返回-1。

三.二叉树的遍历操作

先序遍历:

1.若根节点(当前节点)不为空,访问根结点,否则返回。

2.若左子树不为空,访问左子树

3.若右子树不为空,访问右子树

 43 void prior(int root)
 44 {
 45         if(root == -1)
 46         {
 47                 return;
 48         }
 49         printf("%d\n", root);
 50         prior(left[root]);
 51         prior(right[root]);
 52 }

上面描述了递归的先序遍历的代码,逻辑异常明显。下面写一个非递归的先序遍历代码。

先序遍历的递归代码相较于中序与后续来说是较为简单的,只要牢记访问的顺序是先根节点再左子树最后是右子树,左右子树的访问也是相同的。

我们可以看着递归代码来写出其对应的非递归代码,递归的好处就在于,我们不需要自己去维护一个栈。

仔细分析上面的代码,这个我们看不见

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值