数据结构——二叉树

本文详细讲解了树形结构的一对多概念,区分了叶子节点和分支节点,并介绍了深度与广度的概念。特别聚焦于二叉树,包括其定义、节点结构、遍历方法(前序、中序、后序及层序),以及满二叉树和完全二叉树的区别。此外,还涵盖了二叉树的节点操作、节点个数计算、层数统计以及销毁方法。
摘要由CSDN通过智能技术生成

树形结构:
一对多概念:
除了根节点以外,其它所有节点都只有一个前驱节点可以有多个后继节点
叶子节点:只有前驱节点,没有后继节点
其它的节点都叫做分支节点
深度:描述树形结构分了多少层
广度:每一个后继节点的个数 
一个树中某个节点的后继节点的个数最多则称之为这个树的广度
森林:n个互不相交的树的集合
二叉树:
每一个节点的子节点个数不能超过两个 
且子节点的位置不能更改(二叉树分左右)
左子节点和右子节点
满二叉树:所有的叶子节点都处在同一层,且所有节点的度都为2
满二叉树第k层有2的k-1次方个节点
k层的满二叉树总共有2的k次方-1个节点
完全二叉树:(是由满二叉树引出来的)自右向左,自下而上删(只是删除了满二叉树最底层最右边的若干个节点) 
假设二叉树的深度为k,除了第k层外,其它各层数的节点数都达到最大个数(0->k-1为一个满二叉树) 
第k层的所有节点都连续的集中在最左边 堆一般都是都是用完全二叉树来实现的
满二叉树一定是完全二叉树,而完全二叉树不一定是满二叉树
二叉树的遍历 
1.前序遍历 根 左子树 右子树 
2.中序遍历 左子树 根 右子树 
3.后序遍历 左子树 右子树 根 
4.层序遍历 自上而下,自左向右依次遍历 1.2.3.为深度优先的遍历算法 
4.为广度优先的遍历算法 
前序+中序 和 中序+后序 才能唯一的还原出来一条二叉树 
只知道一个序列无法展开扩展为扩展二叉树 展开是可以给叶子节点引出左右节点(赋予一个特殊符号eg:#) 
二叉树节点结构体
1.pL指向左子节点
2.数据
3.pR指向右子节点 
二叉树代码切记递归思想! 
1.创建二叉树 返回二叉树节点指针 
2.判断是否为空 
3.利用递归的思想开始前中后序遍历并打印节点数据 
层序遍历的难点在于ABC访问完后又要回到左子树来访问B的D和E,又回到C访问G 
始终需要一个结构把每次需要访问的数据保存起来(保存节点保存的是节点地址) 因为先保存进去的先出来所以需要使用到队列 
1.创建队列 
2.入队 
3.判断只要队列不为空时进入循环 
1.让节点出队 打印所含字符 
2.判断左右节点是否为空,不为空则入队 
获取节点数的个数 
1.判断是否为空 
2.不是空
return 1+getBTNodeCnt(pRoot>pL)
+getBTNodeCnt(pRoot->pR) 
统计二叉树的层数 
1.判断是否为空(递归的出口) 
2.判断左子树和右子树层,谁多返回谁+1 int cntl = getBTLayerCnt(pRoot->pL); 
int cntR = getBTLayerCnt(pRoot->pR);
return cntl > cntR ? cntl+1:cntR+1; 
二叉树的销毁 
先销毁左子树再销毁右子树最后销毁根(如果为空则结束)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

seven——seven

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

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

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

打赏作者

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

抵扣说明:

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

余额充值