前言
树是数据元素(结点)之间具有层次关系的非线性结构。在树结构中,除根以外的结点只有一个前驱结点,可以有零至多个后继结点,根结点没有前驱结点
基本术语
1.父母、孩子、兄弟结点
2.度(结点所拥有的子树数目),如A的度为3
3.结点的层次(结点处于树中的位置,约定根结点层次为1),树的高度(树中结点的最大层次数)如图中树高度为3
4.边(设X结点是y结点的父母结点,有序对(X,y)称为这两个结点的边,路径如A到E结点,表示为(A,B,E),路径长度(路径上的边数)为2
5.无序数与有序树(区别子树之间有没有次序)
6.森林(删除根结点)
二叉树性质
二叉树最多有两颗子树,分别为左右子树
性质1:若根结点的层次为1,则二叉树第i层最多有2^(i-1)(i>1)个结点
性质2:在高度为h的二叉树中,最多有2^h-1个结点(h>=0)
性质3:设一棵二叉树的叶子结点数为n0,2度结点数为n2,则n0=n2+1
性质4:一颗具有n个结点的完全二叉树,其高度为h=[log以2为底数n为参数]+1;其中[]是高斯取整函数
性质5:一颗具有n个结点的完全二叉树,对序号为i(0<=i
2.若2i+1<n,则i的左孩子结点序号为2i+1;否则无左孩子
3.若2i+2<n,则i的右孩子结点序号为2i+2,否则i无右孩子
二叉树的遍历规则
孩子优先遍历
二叉树的遍历是按照一定规则和次序访问二叉树中的所有结点,并且每个结点仅被访问一次,同时遍历二叉树访问结点的次序是线性的。
1.先根次序:访问根结点,遍历左子树,遍历右子树(124536)
2.中根次序:遍历左子树,访问根结点,遍历右子树(425136)
3.后根次序:遍历左子树,遍历右子树,访问根结点(452631)
兄弟优先遍历
该遍历是按照层次进行的,遍历历程是从根结点开始,逐层深入,从左至右依次访问完当前层的所有结点,在访问下一层
二叉树抽象数据类型和存储结构
顺序存储结构
二叉树的顺序存储结构仅适用于完全二叉树和满二叉树,如图所示。根据之前的性质,可以实现对应关系一一对应个。
而对于非完全二叉树,如果采取顺序存储,可以将其补成一个完全二叉树,对于空结点利用特殊符号代替,但是会造成空间浪费,并且线性映射关系不明确
链式存储结构
二叉链表采用两条链分别连接左右孩子结点,每个结点有三个域:data存储数据元素,left、right分别指向左右孩子结点
三叉链表在二叉链表基础上增加一条链parent连接父母结点
二叉链表结点
抽象数据类型
下面是其实现类