二叉树 binary tree

1. 定义

二叉树是树的一种,具有如下特点:

(1)每个结点最多有两颗子树,结点的度最大为2。

(2)左子树和右子树是有顺序的,次序不能颠倒。

(3)即使某结点只有一个子树,也要区分左右子树。

 

2. 二叉树的遍历

(1)先序遍历

又叫先根遍历、先序遍历、前序周游

遍历顺序:VLR,根左右

(2)中序遍历

又叫中根遍历、中序周游

遍历顺序:LVR,左根右

(3)后序遍历

又叫后根遍历、后序周游

遍历顺序:LRV,左右根

 

3. 特殊二叉树

(1)满二叉树:

所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是满二叉树。

特点:

a. 叶子只能出现在最下一层。

b. 非叶子结点度一定是2.

c. 在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

(2)完全二叉树

对一棵具有n个结点的二叉树按层序排号,如果编号为i的结点与同样深度的满二叉树编号为i结点在二叉树中位置完全相同,就是完全二叉树。

特点:

a. 叶子结点只能出现在最下一层(满二叉树继承而来)

b. 最下层叶子结点一定集中在左 部连续位置。

c. 倒数第二层,如有叶子节点,一定出现在右部连续位置。

d. 同样结点树的二叉树,完全二叉树的深度最小(满二叉树也是对的)。

 

4. 二叉搜索树(binary search tree)

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

二叉搜索树的查找和插入都很简单,这里就不叙述了。

重点谈谈二叉搜索树一个节点的删除,分为三种情况:

(1)被删除节点是一个叶子节点

这种情况,直接删除即可

(2)被删除节点只有左或者右子树

这种情况,只需要把非空的左子树或者右子树连接到父节点即可(替代要删除的节点)

(3)被删除的节点左右子树都非空

这种情况下,就要找到应被删除节点x的左子树中值最大的叶子节点w(或右子树中值最小的叶子节点),将这个叶子节点w的值与原应该被删除节点x的值交换,然后删除该叶子节点w(即找了个替死鬼)。

如果原应被删除的节点x的左子树根节点y,只有左子树a,右子树为空(即左子树的根节点y是左子树的最大值),那么要在原被删节点x与左子树根节点y值交换之后,把这个左子树的左子树a,连到原被删除节点x的左指针上,然后删除这个左子树根节点y。

posted @ 2019-03-02 20:39  leo_lee  阅读(238)  评论(0编辑  收藏  举报