二叉排序树的创建与使用

来源:互联网 发布:python可以开发游戏吗 编辑:程序博客网 时间:2024/06/05 09:49

描述:
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树:(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;}}

原创粉丝点击