Java中二叉树的实现

package iterator;

import java.util.ArrayList;
import java.util.List;

public class BinaryTree {

private BinaryTree leftNode;	//左子节点
private BinaryTree rightNode;	//右子节点
private Object value;			//值

public BinaryTree getLeftNode() {
	return leftNode;
}

public void setLeftNode(BinaryTree leftNode) {
	this.leftNode = leftNode;
}

public BinaryTree getRightNode() {
	return rightNode;
}

public void setRightNode(BinaryTree rightNode) {
	this.rightNode = rightNode;
}

public Object getValue() {
	return value;
}

public void setValue(Object value) {
	this.value = value;
}

/**
 * 按照左小(或相等)右大的规律添加节点
 * @param value
 */
public void add(Object value){
	if(getValue() == null){
		setValue(value);
	}else {
		if((int)getValue() >= (int)value){
			if(getLeftNode() == null){
				setLeftNode(new BinaryTree());
			}
			getLeftNode().add(value);
		}else {
			if(getRightNode() == null){
				setRightNode(new BinaryTree());
			}
			getRightNode().add(value);
		}
	}
	
}

//中根序遍历
public List<Object> LDR(){
	List<Object> values = new ArrayList<Object>();
	//左
	if(getLeftNode() != null){
		values.addAll(getLeftNode().LDR());
	}
	//根
	values.add(getValue());
	//右
	if(getRightNode() != null){
		values.addAll(getRightNode().LDR());
	}
	return values;
}

//先根序遍历
public List<Object> DLR(){
	List<Object> values = new ArrayList<Object>();
	//根
	values.add(getValue());
	//左
	if(getLeftNode() != null){
		values.addAll(getLeftNode().DLR());
	}
	//右
	if(getRightNode() != null){
		values.addAll(getRightNode().DLR());
	}
	return values;
}

//后根序遍历
private List<Object> LRD() {
	List<Object> values = new ArrayList<Object>();
	//左
	if(getLeftNode() != null){
		values.addAll(getLeftNode().LRD());
	}
	//右
	if(getRightNode() != null){
		values.addAll(getRightNode().LRD());
	}
	//根
	values.add(getValue());
	return values;
}

public static void main(String[] args) {
	int[] array = new int[]{5,3,7,6,4,1,9,2,8,0};
	BinaryTree bTree = new BinaryTree();
	for (int i : array) {
		bTree.add(i);
	}
	
	List<Object> ldr = bTree.LDR();
	System.out.println("中根序遍历(左根右):"+ldr);
	
	List<Object> dlr = bTree.DLR();
	System.out.println("先根序遍历(根左右):"+dlr);
	
	List<Object> lrd = bTree.LRD();
	System.out.println("后根序遍历(左右根):"+lrd);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值