Java实现自定义排序二叉树
二叉树一直是数据结构中重头,这里我实现了二叉排序树(又叫二叉搜索树,二叉查找树,BST),和二叉树的前序遍历,中序遍历,后序遍历,层次遍历,镜像二叉树。
二叉查找树(Binary Search Tree),它对于大多数情况下的查找和插入在效率上来说是没有问题的,但是它在最差的情况下效率比较低。平衡查找树(Balanced Search Tree)能够使得一棵具有N个节点的树中,该树的高度能够维持在lgN左右,这样就能保证只需要lgN次比较操作就可以查找到想要的值,比如AVL树、2-3查找树(2-3 Search Tree)、红黑树、B树、B+树、B*树、Trie树(字典树)等。
树的演变很多,应用也很广泛。
集合框架源码。
2017年9月21日,更新:增加查找二叉排序树中最接近k的节点的值。
2017年9月22日,更新:增加二叉树的删除节点。
2017年9月23日,更新:增加镜像二叉树。
2017年9月30日,更新:增加二叉树遍历的循环做法,镜像二叉树的循环做法。
二叉树的抽象类
二叉树的抽象类如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74package com.chain.algorithm.test.day01;
import java.util.List;
public abstract class AbstractBinaryTree<T> implements BinaryTreeInter<T> {
/**
* 构建排序二叉树
*
*/
public abstract void add(T node);
/**
* 删除二叉树的节点
*
* @return
*/
public abstract boolean delete(T value);
public abstract int size();
public abstract boolean isEmpty();
public abstract void clear();
/**
* 广度优先遍历
*
*/
public abstract List<T> bfsToList();
/**
* 中序遍历
*
* @return
*/
public abstract List<T> inOrderToList();
/**
* 前序遍历
*
* @return
*/
public abstract List<T> preOrderToList();
/**
* 后序遍历
*
* @return
*/
public abstract List<T> postOrderToList();
/**
* 中序遍历(循环)
*
* @return
*/
public abstract List<T> inOrderLoopToList();
/**
* 前序遍历(循环)
*
* @return
*/
public abstract List<T> preOrderLoopToList();
/**
* 后序遍历(循环)
*
* @return
*/
public abstract List<T> postOrderLoopToList();
}
二叉树的接口
BinaryTreeInterface:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15package com.chain.algorithm.test.day01;
public interface BinaryTreeInter<T> {
/**
* 镜像二叉树
*/
public void mirror();
/**
* 镜像二叉树(循环)
*/
public void mirrorLoop();
}
排序二叉树的实现
内部包含一个树节点的内部类。
1 | package com.chain.algorithm.test.day01; |
测试代码
2017年9月21日,更新:增加查找二叉排序树中最接近k的节点的值。
2017年9月22日,更新:增加二叉树的删除节点。
2017年9月23日,更新:增加镜像二叉树。
2017年9月30日,更新:增加二叉树遍历的循环做法,镜像二叉树的循环做法。
源码传送门
1 | package com.chain.algorithm.test.day01; |
测试结果:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
390
true
[]
[]
[]
[]
[]
[]
[]
14
false
[32, 28, 56, 14, 51, 68, 25, 44, 78, 41, 72, 79, 40, 42]
[32, 28, 14, 25, 56, 51, 44, 41, 40, 42, 68, 78, 72, 79]
[14, 25, 28, 32, 40, 41, 42, 44, 51, 56, 68, 72, 78, 79]
[25, 14, 28, 40, 42, 41, 44, 51, 72, 79, 78, 68, 56, 32]
25
true
13
false
[32, 28, 56, 14, 44, 68, 25, 41, 78, 40, 42, 72, 79]
[32, 28, 14, 25, 56, 44, 41, 40, 42, 68, 78, 72, 79]
[14, 25, 28, 32, 40, 41, 42, 44, 56, 68, 72, 78, 79]
[25, 14, 28, 40, 42, 41, 44, 72, 79, 78, 68, 56, 32]
13
false
[32, 56, 28, 68, 44, 14, 78, 41, 25, 79, 72, 42, 40]
[32, 56, 68, 78, 79, 72, 44, 41, 42, 40, 28, 14, 25]
[79, 78, 72, 68, 56, 44, 42, 41, 40, 32, 28, 25, 14]
[79, 72, 78, 68, 42, 40, 41, 44, 56, 25, 14, 28, 32]
13
false
[32, 28, 56, 14, 44, 68, 25, 41, 78, 40, 42, 72, 79]
[32, 28, 14, 25, 56, 44, 41, 40, 42, 68, 78, 72, 79]
[14, 25, 28, 32, 40, 41, 42, 44, 56, 68, 72, 78, 79]
[25, 14, 28, 40, 42, 41, 44, 72, 79, 78, 68, 56, 32]
[32, 28, 14, 25, 56, 44, 41, 40, 42, 68, 78, 72, 79]
[14, 25, 28, 32, 40, 41, 42, 44, 56, 68, 72, 78, 79]
[25, 14, 28, 40, 42, 41, 44, 72, 79, 78, 68, 56, 32]
部分内容摘自伯乐在线。