二叉树

Data structure-树、二叉树

1. 树是N(N>0)个结点的有限(有限:不是无限的)集合,在一棵非空有限集合中,有且仅有一个特定的结称为树的根结点,根节点之下可以有0个以上的子节点(也可以没有),而各子节点称为此树的子树。
注意:树不可以为空
2. 根结点:一棵树当中没有父结点的结点。
叶子结点:一棵树中没有子结点称为叶子结点。也叫终端结点。
非终端结点:除叶子结点以外的所有结点。

3. 同一个父结点的所有结点叫做兄弟结点。

4. 结点度(分支度):是指每一个所拥有结点的个数。

5. 树的度(树的分支度):一棵树中最大的结点即为树的度。

6. 层:阶层为结点之特性值:将结点值设为1,其子结点的值为2。

7. 高度和深度:一棵树中最大阶层值称为树的高度或深度。

8. 祖先:由某个结点X到根结点之路径上的所有结点。均称为X的祖先。

9. 林:N>=0个树的集合称为林。若将一树的根结点移去,所剩下的树正好是林。

10. 父结点与兄弟结点:A是(B,C,D)的父结点。B,C,D是兄弟结点,是A的子结点。其他略。

2.二叉树的概念

1. 二叉树是树的一种,二叉树的结点最多只有两个,因此二叉树的结点度最大值是2。

2. 二叉树的定义:
A 由有限个结点所构成之集合,此集合可以为空。
B 二叉树的结点可以分为两棵子树,称左子树和右子树。同时左右子树也是二叉树。

3. 树与二叉树的比较:
A 二叉树可以为空,而树不可以(至少要有根结点)。
B 二叉树的子树有顺序关系,而树没有。
C 二叉树的度必为(0 ,1, 2)而树的结点度可以大于2。
D 二叉树和树不是同一类型,只不过可以把二叉树按树的形式理解。

4.二叉树的特性:(面试)
A 在二叉树的第I层最多有 ( 2^(i-1) )个结点。(i>=1)。
B 高度为K的二叉树中最多有 ( 2^K -1)个结点。

5.满二叉树:树中所有结点均在同一阶层而其它非终端结点度均为“2”,且树的高度是K,其结点为2的K次方减1。

6.完全二叉树:一棵树中扣除最大阶层,那层后一满二叉树,且阶层最大层的阶层均向左对齐。此树称为完全二叉树。

满二叉树一定是完全二叉树;完全二叉树不一定是满二叉树

7.树与二叉树之间的转换:
每一棵树都能转化成它对应的二叉树,转变的步骤如下:
A 加线:在兄弟之间加连线。
B 抹线:只保留到最左端的孩子连线,抹掉双亲到其他孩子的连线。
C 施转:以树根为轴心,按顺时针方向稍加旋转,即形成二叉树的结构。
注意:在树经过这种转换所对应的二叉树中,根结点是没有右孩子,每一个结点的左孩子是它原来的树中的最左的孩子右孩子是它在原来树中的下一个兄弟。

8.创建排序二叉树
创建排序二叉树的步骤,也就是不断地向排序二叉树添加节点的过程,向排序二叉树添加节点的步骤如下:
(1)以根节点当前节点开始搜索。
(2)拿新节点的值和当前节点的值比较。
(3)如果新节点的值更大,则以当前节点的右子节点作为新的当前节点;如果新节点的值更小,则以当前节点的左子节点作为新的当前节点。
(4)重复 2、3 两个步骤,直到搜索到合适的叶子节点为止。
(5)将新节点添加为第 4 步找到的叶子节点的子节点;如果新节点更大,则添加为右子节点;否则添加为左子节点。

9.二叉树的遍历: 根左右,左根右,左右根
A 先序:若二叉树非空,则访问根结点,按先序遍历左子树,再遍历右子树。
B 中序:若二叉树非空,按中序遍历左子树,再访问根结点,再按中序遍历右子树。
C 后序:若二叉树非空,按后序遍历左子树,再遍历右子树,再访问根结点。

10.二叉树的删除分四种情况:
1.结点无左子树,无右子树。
A 为根结点。
B 非根结点,但是叶子结点。
被删除的节点是叶子节点,则只需将它从其父节点中删除即可。
2.结点无左子树,有右子树。
A 为根结点
B 非根结点
被删除节点 p 只有右子树,将 p 的右子树 pR 添加成 p 的父节点的右子树即可
3.结点有左子树,无右子树。
A 为根结点
B 非根结点
被删除节点 p 只有左子树,将 p 的左子树 pL 添加成 p 的父节点的左子树即可
4.结点有左子树,有右子树。
A 为根结点
B 非根结点
若被删除节点 p 的左、右子树均非空,有两种做法:
第一、将 pL 设为 p 的父节点 q 的左或右子节点(取决于 p 是其父节点 q 的左、右子节点),将 pR 设为 p 节点的中序前趋节点 s 的右子节点(s 是 pL 最右下的节点,也就是 pL 子树中最大的节点)。
第二、以 p 节点的中序前趋或后继替代 p 所指节点,然后再从原排序二叉树中删去中序前趋或后继节点即可。(也就是用大于 p 的最小节点或小于 p 的最大节点代替 p 节点即可)。

寻找替代结点的方法有两种:
1.找结点左子树的最右边的点。
2.找结点右子树的最左边的点。

二叉树查询

//根左右
public static void m1(Tree root){
Tree temp=root;
if (temp!=null) {
System.out.println(“节点”+temp.value);
m1(temp.Left);
m1(temp.Right);
}
}
//左根右
public static void m2(Tree root){
Tree temp=root;
if (temp!=null) {
m2(temp.Left);
System.out.println(“节点”+temp.value);
m2(temp.Right);
}
}
//左右根
public static void m3(Tree root){
Tree temp=root;
if (temp!=null) {
m3(temp.Left);
m3(temp.Right);
System.out.println(“节点”+temp.value);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值