开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
如果序列相同则输出YES,否则输出NO
2 567432 543267 576342 0
YES NO
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String s = preOrderString(scanner.next());
for (int i = 0; i < n; i++) {
String s1 = preOrderString(scanner.next());
System.out.println(s.equals(s1)?"YES":"NO");
}
}
static class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
static void creat(TreeNode root, int v){
if (v<root.val){
if (root.left==null) root.left = new TreeNode(v);
else creat(root.left,v);
}else {
if (root.right==null) root.right= new TreeNode(v);
else creat(root.right,v);
}
}
static void preOrder(TreeNode root,StringBuilder builder) {
if (root != null) {
builder.append(root.val);
preOrder(root.left,builder);
preOrder(root.right,builder);
}
}
static String preOrderString(String s){
char[] tree = s.toCharArray();
TreeNode root = new TreeNode(tree[0]);
for (int i = 1; i < tree.length; i++) creat(root,tree[i]);
StringBuilder builder = new StringBuilder();
preOrder(root,builder);
return builder.toString();
}
}