二叉搜索树实现

二叉搜索树的实现是用树的结果来实现的

搜索二叉树的构成原理:

递归找到要插入的位置,然后创建节点返回的时候把节点连接起来,

二叉搜索树就是左边的都比跟节点小,右边的都比根节点大,和折半查找差不多

首先介绍二叉搜索的insert操作,就是构成二叉搜索树

	public Node _insert(Node node,int key,int value) {
		if(node ==null) {
			count++;
			return new Node(key, value);
		}
		
		if(node.key==key) {
			node.value =value;
		}
		else if(key>node.key) {
			node.right=_insert(node.right,key,value);
		}
		else {
			node.left=_insert(node.left,key,value);
		}
		return node;
	} 

介绍二叉搜索树的remove函数的原理

首先先要找到这个要删除的节点,如果找不到返回null

remove分为3种结果

如果删除节点的right为空 那么直接用该节点的left代替该节点

如果删除节点的left为空 那么直接用该节点的right代替该节点

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

那就去寻找该右节点的最小的那个数或者寻找该左节点的最大的数

来代替这个要替换的节点

接下来我们讲解找右节点最小的数

因为最小的都在搜索树的右节点只要递归找的右节点即可

	public Node minnum(Node node) {
		if(node.left==null) {
			return node;
		}
		return minnum(node.left);
	}

 找到最小的节点,那么该节点必然没有left

所以根据以上规则删除最小的这个节点

	private Node removeMin(Node right) {
		if(right.left==null) {
			return right.right;
		}
		right.left= removeMin(right.left);
		return right;
	}

然后根据找出来的这个节点替换要remove的节点

	private Node _remove(Node node,int k) {
		if(node==null) {
			return null;
		}
		if(k>node.key) {
			node.right=_remove(node.right,k);
			return node;
		}
		else if(k

 

你可能感兴趣的:(算法)