二叉排序树的创建与使用

描述:
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有的结点值均小于它的根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)它的左右子树也分别为二叉排序树。现要求根据输入的元素值,构造一棵二叉排序树,并输出其先序遍历、中序遍历和后序遍历结果。
输入:
输入第一行为测试用例个数n,接下来为n个测试用例,每个测试用例占两行,其中第一行为元素个数m,第二行为m个需要构造成二叉排序树的元素值。
输出:
每个测试用例用三行输出,其中第一行输出先序遍历结果,第二行输出中序遍历结果,第三行输出后序遍历结果。各元素之间用一个空格隔开。
样例输入:
1
5
8 4 2 6 4
样例输出:
8 4 2 6 4
2 4 4 6 8
2 4 6 4 8

代码如下:

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int treenumber = sc.nextInt();
		while (treenumber-- != 0) {
			int nodenumber = sc.nextInt();
			int[] data = new int[nodenumber];
			for (int i = 0; i < nodenumber; i++)
				data[i] = sc.nextInt();
			Tree tree = new Tree(data[0]);
			for (int i = 1; i < nodenumber; i++) {
				Node search = new Node(data[i]);
				tree.BuildTree(search, tree.getHead());
			}
			tree.xian(tree.getHead());
			System.out.println();
			tree.zhong(tree.getHead());
			System.out.println();
			tree.hou(tree.getHead());
			System.out.println();
		}
	}
}

class Tree {
	/// 类成员
	private Node head;

	/// 构造方法
	public Tree(int item) {
		head = new Node(item);
	}

	/// 函数集合
	public void BuildTree(Node search, Node tree) {

		if (search.data >= tree.data) {
			if (tree.rchild == null) {
				tree.rchild = search;
				return;
			} 
			BuildTree(search, tree.rchild);
		} else {
			if (tree.lchild == null) {
				tree.lchild = search;
				return;
			} 
			BuildTree(search, tree.lchild);
		}
		
	}

	public void hou(Node search) {
		if (search == null)
			return;
		hou(search.lchild);
		hou(search.rchild);
		System.out.print(search.data + " ");
	}

	public void zhong(Node search) {
		if (search == null)
			return;
		zhong(search.lchild);
		System.out.print(search.data + " ");
		zhong(search.rchild);
	}

	public void xian(Node search) {
		if (search == null)
			return;
		System.out.print(search.data + " ");
		xian(search.lchild);
		xian(search.rchild);
	}

	/// Get和Set方法
	public Node getHead() {
		return head;
	}

	public void setHead(Node head) {
		this.head = head;
	}
}

class Node {
	public Node lchild;
	public Node rchild;
	public int data;

	public Node(int item) {
		lchild = rchild = null;
		data = item;
	}

}

posted @ 2017-12-05 17:30  让你一生残梦  阅读(395)  评论(0编辑  收藏  举报