天天看点

Java实现 二叉搜索树算法(BST)

树是由节点和边构成,储存元素的集合。节点分根节点、父节点和子节点的概念。

如图:树深=4; 5是根节点;同样8与3的关系是父子节点关系。

Java实现 二叉搜索树算法(BST)

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

如图:1/8是左节点;2/3是右节点;

Java实现 二叉搜索树算法(BST)

顾名思义,二叉树上又加了个搜索的限制。其要求:每个节点比其左子树元素大,比其右子树元素小。

如图:每个节点比它左子树的任意节点大,而且比它右子树的任意节点小

Java实现 二叉搜索树算法(BST)

binarysearchtree.java

1. 节点数据结构

首先定义了节点的数据接口,节点分左节点和右节点及本身节点值。如图

Java实现 二叉搜索树算法(BST)

代码如下:

2. 插入

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

Java实现 二叉搜索树算法(BST)

a. 从root节点开始

b.如果root为空,root为插入值

c.循环:

d.如果当前节点值大于插入值,找左节点

e.如果当前节点值小于插入值,找右节点

代码对应:

3.查找

其算法复杂度 : o(lgn),树深(n)。如图查找逻辑:

Java实现 二叉搜索树算法(BST)

a.从root节点开始

b.比当前节点值小,则找其左节点

c.比当前节点值大,则找其右节点

d.与当前节点值相等,查找到返回true

e.查找完毕未找到

4. 删除

Java实现 二叉搜索树算法(BST)

结果为:

Java实现 二叉搜索树算法(BST)

a.找到删除节点

b.如果删除节点左节点为空 , 右节点也为空;

c.如果删除节点只有一个子节点 右节点 或者 左节点

d.如果删除节点左右子节点都不为空

代码对应见上面完整代码。

案例测试代码如下,binarysearchtreetest.java

运行结果如下:

与偶尔吃一碗“老坛酸菜牛肉面”一样的味道,品味一个算法,比如bst,的时候,总是那种说不出的味道。

树,二叉树的概念

bst算法