二叉查找树的基本特征

版权声明:欢迎转载,注明作者和出处就好!如果不喜欢或文章存在明显的谬误,请留言说明原因再踩哦,谢谢,我也可以知道原因,不断进步! https://blog.csdn.net/csonst1017/article/details/84972423

最近在实现二叉查找树的各种算法,总结了二叉查找树的基本特征,如果不知道基本特征的话,那肯定是实现不了的。

1.二叉查找树

首先二叉查找树是拥有二叉树的全部特征的,可以把二叉树比作父类,而二叉查找树是子类。这里就不说继承过来的特征了,只说二叉查找树特有的性质特征。

特征一:
任意结点(包括根结点)的左子树上的结点的值都比这个结点得值小。
特征二:
任意结点(包括根结点)的右子树上的结点的值都比这个结点得值大。
特征三(前驱结点):
二叉查找树中序遍历完成后和这个节点相邻的前面的节点为该节点的前驱节点。

前驱结点的判断有3种情况,每种情况都有不同的判断方法:

(1)如果x结点存在孩子,则"x的前驱结点"为 “x的子树中结点值最大的结点”。
(2)如果x结点不存在孩子,且x是它的父结点的孩子,则"x的前驱结点"为 “x的父结点”。
(3)如果x结点不存在孩子,且x是它的父结点的孩子,从x顺着线往上延伸,一直延伸到根结点,如果延伸过程中延伸到的点为其父亲结点"y"的孩子,那么这个父亲结点"y"就是x的前驱结点,如果延伸过程中没有符合条件的,则这个x没有前驱结点。

最简单的方法还是把树中序遍历一下,一目了然。

特征四(后继结点):
二叉查找树中序遍历完成后和这个节点相邻的后面的节点为该节点的后继节点。

后继结点的判断有3种情况(跟前驱相反),每种情况都有不同的判断方法:
(1)如果x结点存在孩子,则"x的后继结点"为 “x的子树中结点值最小的结点”。
(2)如果x结点不存在孩子,且x是它的父结点的孩子,则"x的后继结点"为 “x的父结点”。
(3)如果x结点不存在孩子,且x是它的父结点的孩子,从x顺着线往上延伸,一直延伸到根结点,如果延伸过程中延伸到的点为其父亲结点"y"的孩子,那么这个父亲结点"y"就是x的后继结点,如果延伸过程中没有符合条件的,则这个x没有后继结点。
特征五:
没有值相等的点。

实现二叉查找树的插入,删除,查找,前驱后继等算法都要根据它的基本特征性质来实现。不然实现的是假的二叉查找树。我们在实现其他算法和模拟技术框架的时候亦是如此。

猜你喜欢

转载自blog.csdn.net/csonst1017/article/details/84972423