BinarySearchTree

 

 

 

 

 

 

 

 

 

package com.zhuyu_deng.test;


public class BinarySearchTree<T extends Comparable<? super T>>
{
//	结点
	private static class BinaryNode<T>
	{
		T element;
		BinaryNode<T> left;
		BinaryNode<T> right;

		BinaryNode(final T x, final BinaryNode<T> lt, final BinaryNode<T> rt)
		{
			element = x;
			left = lt;
			right = rt;
		}
	}
//	根
	private BinaryNode<T> root;

	public BinarySearchTree()
	{
		root = null;
	}
// 
	public void makeEmpty()
	{
		root = null;
	}

	public boolean isEmpty()
	{
		return root == null;
	}

	public boolean contains(final T x)
	{
		return contains(x, root);
	}

	public void printTree()
	{
		if (isEmpty())
			System.out.println("Empty tree");
		else
			printTree(root);
	}
	public void insert(T x)
	{
		root = insert(x, root);
	}
	
	public void remove(T x)
	{
		root = remove(x, root);
	}
	private boolean contains(final T x, final BinaryNode<T> t)
	{
		if (t == null)
			return false;
		final int rst = x.compareTo(t.element);
		if (rst < 0)
			return contains(x, t.left);
		else if (rst > 0)
			return contains(x, t.right);
		else
			;
		return true;
	}
//	find min
	private BinaryNode<T> findMin(final BinaryNode<T> t)
	{
		if (t == null)
			return null;
		else if (t.left == null)
			return t;
		return findMin(t.right);
	}
//	find max
	@SuppressWarnings("unused")
	private BinaryNode<T> findMax(BinaryNode<T> t)
	{
		if (t != null)
			while (t.right != null)
				t = t.right;
		return t;
	}

	private BinaryNode<T> remove(final T x, BinaryNode<T> t)
	{
		if (t == null)
			return t;	// Item not found; do nothing
		final int rst = x.compareTo(t.element);
		if (rst < 0)
			t.left = remove(x, t.left);
		else if (rst > 0)
			t.right = remove(x, t.right);
		else if (t.left != null && t.right != null)
		{
			t.element = findMin(t.right).element;
			t.right = remove(t.element, t.right);
		}
		else
		{
			t = (t.left != null) ? t.left : t.right;
		}
		return t;
	}

	private BinaryNode<T> insert(final T x, final BinaryNode<T> t)
	{
		if (t == null)
			return new BinaryNode<T>(x, null, null);
		final int rst = x.compareTo(t.element);
		if (rst < 0)
			t.left = insert(x, t.left);
		else if (rst > 0)
			t.right = insert(x, t.right);
		else
			;
			return t;
	}

	private void printTree(final BinaryNode<T> t)
	{
		if (t != null)
		{
			printTree(t.left);
			System.out.println(t.element);
			printTree(t.right);
		}
	}
	
	private int height(final BinaryNode<T> t)
	{
		if (t == null)
			return -1;
		else
			return 1 + Math.max(height(t.left), height(t.right));
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值