图解:二叉搜索树算法(BST)

树是由节点和边构成,储存元素的集合。节点分根节点、父节点和子节点的概念。
如图:树深=4; 
5是根节点;同样8与3的关系是父子节点关系。

二叉树binary tree,则加了“二叉”(binary),意思是在树中作区分。每个节
点至多有两个子(child),left child & right child。二叉树在很多例子中使用,比如二叉树表示算术表达式。
如图:1/8是左节点;2/3是右节点;

 二、二叉搜索树 BST
顾名思义,二叉树上又加了个搜索的限制。其要求:每个节点比其左子树元素大,比其右子树元素小
如图:每个节点比它左子树的任意节点大,而且比它右子树的任意节点小

三、节点数据结构 
节点分左节点和右节点及本身节点值。如图

四、插入
插入,和删除一样会引起二叉搜索树的动态变化。插入相对删处理逻辑相对简单些。如图插入的逻辑:
 

a. 从root节点开始
b.如果root为空,root为插入值
c.循环:
d.如果当前节点值大于插入值,找左节点
e.如果当前节点值小于插入值,找右节点 

五、查找
其算法复杂度 : O(lgN),树深(N)。如图查找逻辑:
 

思路:
a.从root节点开始
b.比当前节点值小,则找其左节点
c.比当前节点值大,则找其右节点
d.与当前节点值相等,查找到返回TRUE
e.查找完毕未找到
六、删除
首先找到删除节点,其寻找方法:删除节点的后继者是在其右节点树中最小的节点。如图删除对应逻辑: 

 结果为:

思路:
a.找到删除节点
b.如果删除节点左节点为空 , 右节点也为空;
c.如果删除节点只有一个子节点 右节点 或者 左节点
d.如果删除节点左右子节点都不为空 

猜你喜欢

转载自blog.csdn.net/cindywry/article/details/106633752
今日推荐