二叉树结合了两种数据结构的优点:

a.有序数组,可快速查找数据项,(插入和删除慢)

b.链表,快速插入和删除数据项,(查找慢)

树由边连接的节点构成,是范畴更广的图的特例。

路径、根、父节点、子节点、叶节点、子树、访问、遍历、层、关键字、

二叉树

每个节点最多有两个子节点。

二叉树的性质

性质1:二叉树第i层上的结点数目最多为2i-1(i>=1)

性质2:深度为k的二叉树至多有2k-1个结点(k>=1)

性质3:包含n个结点的二叉树的高度至少为(log2n)+1

性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1

满二叉树

定义:高度为h,并且由2h-1个结点组成的二叉树,称为满二叉树

二叉树结点数python 二叉树结点数最多为_结点

 

 

完全二叉树

定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下层的叶结点集中在靠左的若干位置上,这样的二叉树称为完全二叉树。

特点:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。显然,一棵满二叉树必定是一棵完全二叉树,而完全二叉树未必是满二叉树。

二叉树结点数python 二叉树结点数最多为_结点_02

二叉搜索树

一个节点的左节点的关键字值小于这个节点,右子节点的关键字值大于或等于这个节点。

非平衡树

大部分的节点在根的一边或另一边。

不平衡是数据项插入顺序造成的,随机插入树会相对平衡一点。

树的操作

查找、插入、遍历、删除节点

遍历:前序、中序、后序遍历

节点访问的前、中、后顺序来命名

1.前序:该节点、左子树 、右子树

2.中序:左子树、该节点、右子树

3.后序:左子树、右子树、该节点

例子:

二叉树结点数python 二叉树结点数最多为_结点_03

 

 

    前序遍历:ABCDEFGHK

    中序遍历:BDCAEHGKF

    后序遍历:DCBHKGFEA

删除节点(复杂操作)

情况1:删除没有子节点的节点

只需改变该节点的父节点的对应子字段的值,由指向该节点改为null

情况2:删除有一个子节点的节点

剪断该节点,把它的子节点直接连接到它的父节点上,指向要删除节点的子节点

情况3:删除有两个子节点的节点

用它的中序后继来代替该节点。

中序后继:比该节点的关键字值次高的节点。

树的效率

O(logN),精确来说是O(log2N)

用数组表示树

大多数情况下不是很有效率

节点n

该节点的左子节点:2*n+1

该节点的右子节点:2*n+2

父节点:(n-1)/2

重复关键字