二叉搜索树:针对任何一颗子树来说都要满足,父节点>左子树,父节点<右子树。(父节点是中间大小的元素。
堆:父节点和子节点中间的关系,堆顶元素一定是最大值或者最小值
二叉搜索树中序遍历的结果是一个有序的序列
具体实现
主要有三个核心操作(增删查),对于二叉搜索树,修改操作不能针对key进行修改
package package1123;
public class BinarySearchTree {
public static class Node{
int key;
int value; //TreeSet,TreeMap
Node left;
Node right;
public Node(int key, int value) {
this.key = key;
this.value = value;
}
@Override
public String toString() {
return "Node{" +
"key=" + key +
", value=" + value +
'}';
}
}
//创建一根树根节点,初始情况下是空树,根节点指向null
private Node root = null;
//查找
public Node search(int key){
//从根节点出发,根据这个关系,决定在左子树中找还是右子树中找
Node cur = root;
while (cur != null){
if (key == cur.key){
return cur;
}else if (key < cur.key){
//去左子树找
cur = cur.left;