树的相关概念及术语
练习题:求树中叶子结点的方法
解:
**求树中叶子结点的方法:**sum(node)=sum(分支)+1
sum(分支)=度的数目 * 结点数目
设叶子结点的数目为x,
建立等式:3+4+5+2+x=4 * 3+3 * 4+2 * 5+1 * 2+0 * x+1
解得x为23
二叉树的定义,性质以及存储结构
注意:二叉树不是树(n=0的时候为空二叉树,而树要求n!=0)二叉树是一种树形结构度为2.
二叉树的性质
性质很重要,背下来
练习题:求二叉树的总结点数
方法:叶子结点数=度为2的结点数+1
设叶子结点为n0;
n0=20;//此处为叶子结点数,即度为0
n1=10+15=25;//此处求出只有左孩子或右孩子的结点数,即度为1
n2=n0-1=19;//此处求出度为2的结点数
所以:n=n0+n1+n2=64
满二叉树
完全二叉树的定义
完全二叉树的性质
注:完全二叉树,最多有一个度为一的结点。
特别注意此处的向下取整符号
练习题:求完全二叉树叶子结点数
解:根据性质5第三条,结点为100的完全二叉树,其父结点编号为最多到50,所以从51到100都是叶子结点。
练习题2
解:
(1)由于第六层为满二叉树所以前六层共有结点=2^6-1=63个//性质二:高度为k的二叉树,总结点数<=s ^ k -1,k为层数
之后再加上第七层的结点数
所以总共结点数为=2^6-1+10=73个
(2)方法一详解:
编号为73的叶子结点其父结点为73/2向下取整为36,所以从37开始就都为叶子结点
二叉树的存储
顺序存储
动态二叉链表
二叉链表中有n个结点,则其含有n+1个空指针
二叉树的遍历
先序,中序,后序遍历
解:
先序为:ABCDEFGHI
中序为:CDBEFAHGI
后序为:DCFEBHIGA
根据序列还原二叉树
方法: 先确定根节点(先序为第一个字母,后序为最后一个字母),在根据不同序列之间对比,将剩下的元素写为子树,之后按照同样地方法确定根节点。
遍历算法
遍历算法的应用~求给定二叉树的高度
求高度的关键是运用递归算法
设计算法求二叉树的结点数
设计算法求叶子结点数
练习题:非递归输出最后一个结点
二叉链表转化为顺序链表