java 二叉查找树_Java实现二叉搜索树及相关操作

package com.tree;

import com.tree.BitNode;

/**

*

* 二叉搜索树:一个节点的左子节点的关键字小于这个节点。右子节点的关键字大于或等于这个父节点

*

* 注意:不适合插入同样关键字的节点

与平衡二叉树比較:不适合插入有序序列

*/

public class SearchBinTree {

public static void main(String[] args) {

BitNode root = new BitNode();

root.data = 6;

int[] arr = { 1, 3, 9, 7, 0, 4 };

for (int i = 0; i < arr.length; i++) {

insert(root, arr[i]);

}

BinTree.levelTraverse(root);

BitNode successor = getSuccessor(root);

System.out.println("successor:" + successor.data);

System.out.println("delete : " + delete(root, 1));

BinTree.levelTraverse(root);

// BinTree.levelTraverse(root);

//

// BitNode min = getMinNode(root);

// System.out.println("min = " + min.data);

//

// BitNode max = getMaxNode(root);

// System.out.println("max = " + max.data);

}

// 构造二叉搜索树

public static void insert(BitNode root, int data) {

BitNode node = new BitNode();

node.data = data;

if (root == null) {

root = node;

} else {

if (data < root.data) {

if (root.lchild == null) {

root.lchild = node;

} else {

insert(root.lchild, data);

}

} else {

if (root.rchild == null) {

root.rchild = node;

} else {

insert(root.rchild, data);

}

}

}

}

// 查找最小节点

public static BitNode getMinNode(BitNode root) {

BitNode current, min = null;

current = root;

while (current != null) {

min = current;

current = current.lchild;

}

return min;

}

// 查找最大节点

public static BitNode getMaxNode(BitNode root) {

BitNode current, max = null;

current = root;

while (current != null) {

max = current;

current = current.rchild;

}

return max;

}

// 查找

public static BitNode find(BitNode root, int data) {

BitNode current = root;

while (current.data != data) {

if (data < current.data)

current = current.lchild;

else

current = current.rchild;

if (current == null)

return null;

}

return current;

}

// 得到简要被删除的节点的后继(中序遍历)

public static BitNode getSuccessor(BitNode delNode) {

BitNode successorParent = delNode;

BitNode successor = delNode;

BitNode current = delNode.rchild;

while (current != null) {

successorParent = successor;

successor = current;

current = current.lchild;

}

if (successor != delNode.rchild) {

successorParent.lchild = successor.rchild;

successor.rchild = delNode.rchild;

}

return successor;

}

// 删除一个节点----?删除根节点时会出现错误

public static boolean delete(BitNode root, int data) {

BitNode current = root;

BitNode parent = root;

boolean isLeftChild = true;

while (current.data != data) {// search for node

parent = current;

if (data < current.data) { // go left?

isLeftChild = true;

current = current.lchild;

} else { // go right?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值