package 第四章2;
import java.util.LinkedList;
import java.util.Queue;
import javax.xml.bind.Unmarshaller;
public class BinarySearchTree2<T extends Comparable<? super T>>
{
Node<T> root;
public BinarySearchTree2() {
root=null;
}
public static class Node<T>
{
T data;
Node<T> left;
Node<T> right;
public Node(T data)
{this.data=data;this.left=null;this.right=null;}
public Node(T data,Node<T> left,Node<T> right)
{this.data=data;this.left=left;this.right=right;}
}
public void insert(T x)
{
root=insert(x,root);
}
private Node<T> insert(T x, Node<T> root)
{
if(root==null)
return new Node<T>(x,null, null);
int compareResult=x.compareTo(root.data);
if(compareResult<0)
root.left=insert(x, root.left);
else if(compareResult>0)
root.right=insert(x, root.right);
else
;
return root;
}
public void remove(T x)
{
root=remove(x, root);
}
private Node<T> remove(T x,Node<T> root)
{
if(root==null)
;// do nothing ,not found
int compareResult=x.compareTo(root.data);
if(compareResult<0)
root.left=remove(x, root.left);
else if(compareResult>0)
root.right=remove(x, root.right);
else if(root.left!=null && root.right!=null)
{
T element=findMin(root.right);
root.data=element;
root.right=remove(element, root.right);
}
else
root=root.left!=null?root.left:root.right;
return root;
}
public T findMin()
{
return findMin(root);
}
public T findMin(Node<T> root)
{
Node<T> p=root;
if (p==null) {
throw new RuntimeException("当前二叉树为空树");
}
while(p.left!=null)
{
p=p.left;
}
return p.data;
}
public T findMax()
{
Node<T> p=root;
if (p==null) {
throw new RuntimeException("当前二叉树为空树");
}
while(p.right!=null)
{
p=p.right;
}
return p.data;
}
public void layerview()
{
LinkedList<Node<T>> queue=new LinkedList<>();
queue.addLast(root);
Node<T> p;
while(!queue.isEmpty())
{
p=queue.removeFirst();
System.out.print(p.data+" ");
if(p.left!=null)
queue.addLast(p.left);
if(p.right!=null)
queue.addLast(p.right);
}System.out.println();
}
public static void main(String[] args) {
BinarySearchTree2<Integer> tree=new BinarySearchTree2<Integer>();
tree.insert(3);
tree.insert(13);
tree.insert(43);
tree.insert(21);
tree.insert(99);
tree.insert(65);
tree.insert(24);
tree.insert(45);
tree.insert(77);
tree.layerview();
System.out.println(tree.findMin());
System.out.println(tree.findMax());
tree.remove(99);
tree.layerview();
tree.remove(21);
tree.layerview();
}
}
二叉搜索树
最新推荐文章于 2025-04-29 16:04:18 发布