Java实现二叉树

Posted on 2016-03-31 23:46  jackley  阅读(80)  评论(0)    收藏  举报

本案例需要完成的任务定义如下:实现一个二叉树,实现增加节点和树的遍历等功能。

 

定义“二叉树”节点:

对于树节点,关键要素是节点自身数值data、左子节点left和右子节点right。

public class TNode {
	//元素类型为int的节点
	private int data;
	private TNode left;
	private TNode right;
	
	//定义构造器
	public TNode(int i, TNode lft, TNode rt){
		data = i;
		left = lft;
		right =rt;
	}
	public TNode(int i){
		this(i,null,null);
	}
	public TNode(){
		this(0,null,null);
	}
	//更改节点数值
	public void setData(int i){
		data = i;
	}
	//读取节点数值
	public int getData(){
		return data;
	}
	//更改left子节点
	public void setLeft(TNode tn){
		left = tn;
	}
	//读取left子节点
	public TNode getLeft(){
		return left;
	}
	//更改right子节点
	public void setRight(TNode tn){
		right = tn;
	}
	//读取right子节点
	public TNode getRight(){
		return right;
	}
	//打印节点的值
	public void printTNode(){
		System.out.print(data+"->");
	}
}

实现“二叉树”的遍历:

应用递归实现二叉树遍历是很好的思路。遍历的方法按照顺序不同可分为前序遍历、中序遍历和后序遍历,分别表示最先遍历父节点(顺序:父节点->left节点->right节点)、中间遍历父节点和最后遍历父节点。本例采用前序遍历。

package tree;

public class BinaryTree {
	//树的基本元素:根节点
	TNode root;
	//构造器:指定根节点
	public BinaryTree(TNode rt){
		root = rt;
	}
	public BinaryTree(){
		root = null;
	}

	//开始递归遍历,采用前序遍历
	public void traverseTree(TNode rt){
		if(rt!=null)
			rt.printTNode();
		if(rt.getLeft()!=null)
			traverseTree(rt.getLeft());
		if(rt.getRight()!=null)
			traverseTree(rt.getRight());
	}

	//在树中增加节点tn,指定相应的父节点father;
	public void addTNode(TNode tn,TNode father){
	//当子节点数量少于或等于1时允许插入tn,插入顺序先left后right
		if(father == null){
			father = tn;
		}
		if(father.getLeft()==null){
			father.setLeft(tn);
		}
		else if(father.getRight()==null){
			father.setRight(tn);
		}
		else{
			System.out.println("illegal, already have two child nodes!");
		}
	}
}

 

测试程序:

测试了生成二叉树、增加子节点以及遍历二叉树等功能,运行正常。

package tree;

public class TraverseTree {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TNode root = new TNode(99);
		BinaryTree btr = new BinaryTree(root);
		TNode tn1 = new TNode(1);
		TNode tn2 = new TNode(2);
		TNode tn3 = new TNode(3);
		TNode tn4 = new TNode(4);
		btr.addTNode(tn1, root);
		btr.addTNode(tn2, root);
		btr.addTNode(tn3, tn1);
		btr.addTNode(tn4, tn1);
		btr.traverseTree(root);
	}
}