時間限制:1 秒
內存限制:32 兆
特殊判題:否
提交:4111
解決:1836
- 題目描述:
-
判斷兩序列是否爲同一二叉搜索樹序列
- 輸入:
-
開始一個數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{ /** * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while( scanner.hasNext() ){ int n = scanner.nextInt(); if(n == 0){ break; } char souArray[] = scanner.next().toCharArray(); Node tree1 = null; for (int i = 0; i < souArray.length; i++) { tree1 = insertTree(tree1, souArray[i]); } Node tree[] = new Node[n]; for (int i = 0; i < n; i++) { char array[] = scanner.next().toCharArray(); for (int j = 0; j < array.length; j++) { tree[i] = insertTree(tree[i],array[j]); } } for (int i = 0; i < n; i++) { if(prePrintf(tree[i], "").equals(prePrintf(tree1, "")) && inPrintf(tree[i], "").equals(inPrintf(tree1, ""))){ System.out.println("YES"); }else{ System.out.println("NO"); } } } } private static Node insertTree(Node node, char c) { if(node == null){ node = new Node(); node.setKey(c); return node; }else{ if(c < node.getKey()){ node.setlChild( insertTree(node.getlChild(),c) ); } if( c > node.getKey() ){ node.setrChild( insertTree(node.getrChild(),c) ); } } return node; } public static String prePrintf(Node tree, String s){ s += tree.getKey(); if(tree.getlChild() != null){ s = prePrintf(tree.getlChild(),s); } if(tree.getrChild() != null){ s = prePrintf(tree.getrChild(),s); } return s; } public static String inPrintf(Node tree, String s){ if(tree.getlChild() != null){ s = inPrintf(tree.getlChild(),s); } s += tree.getKey(); if(tree.getrChild() != null){ s = inPrintf(tree.getrChild(),s); } return s; } public static String postPrintf(Node tree, String s){ if(tree.getlChild() != null){ s = postPrintf(tree.getlChild(), s); } if(tree.getrChild() != null){ s = postPrintf(tree.getrChild(), s); } s += tree.getKey(); return s; } public static class Node{ Node lChild; Node rChild; char key; public Node getlChild() { return lChild; } public void setlChild(Node lChild) { this.lChild = lChild; } public Node getrChild() { return rChild; } public void setrChild(Node rChild) { this.rChild = rChild; } public char getKey() { return key; } public void setKey(char key) { this.key = key; } } } /************************************************************** Problem: 1009 User: yihukurama Language: Java Result: Accepted Time:90 ms Memory:15556 kb ****************************************************************/