描述
二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值; 2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值; 3. 左、右子树本身也是一颗二叉排序树。 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。
输入描述:
输入包含多组测试数据,每组测试数据两行。 第一行,一个数字N(N<=100),表示待插入的节点数。 第二行,N个互不相同的正整数,表示要顺序插入节点的关键字值,这些值不超过10^8。
输出描述:
输出共N行,每次插入节点后,该节点对应的父亲节点的关键字值。
示例1
输入:
5 2 5 1 3 4
输出:
-1 2 2 5 3
代码如下:
import java.util.Scanner;
/*
* 二叉排序树
*/
public class BinarySortTree {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
//初始化根结点
TreeNode root = new TreeNode(scanner.nextInt());
System.out.println(-1); //根结点的双亲结点是-1
for (int i = 1; i < n; i++) {
create(root, scanner.nextInt());
}
}
}
//二叉排序树的建立,并输出各个节点的父亲节点
public static void create(TreeNode root,int value) {
if (value <= root.value) {
if (root.lChild == null) {
root.lChild = new TreeNode(value);
System.out.println(root.value);
}else {
create(root.lChild, value);
}
}else {
if (root.rChild == null) {
root.rChild = new TreeNode(value);
System.out.println(root.value);
}else {
create(root.rChild, value);
}
}
}
}
class TreeNode{
int value;
TreeNode lChild;
TreeNode rChild;
public TreeNode(int value) {
this.value = value;
}
}