开始一个数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(); } }