從上往下打印出二叉樹的每一個節點,同層節點從左至右打印。 java
輸入: 輸入可能包含多個測試樣例,輸入以EOF結束。
對於每一個測試案例,輸入的第一行一個整數n(1<=n<=1000, :n表明將要輸入的二叉樹元素的個數(節點從1開始編號)。接下來一行有n個數字,表明第i個二叉樹節點的元素的值。接下來有n行,每行有一個字母Ci。
Ci=’d’表示第i個節點有兩子孩子,緊接着是左孩子編號和右孩子編號。
Ci=’l’表示第i個節點有一個左孩子,緊接着是左孩子的編號。
Ci=’r’表示第i個節點有一個右孩子,緊接着是右孩子的編號。
Ci=’z’表示第i個節點沒有子孩子。 node
對應每一個測試案例,
按照從上之下,從左至右打印出二叉樹節點的值。 測試
7 8 6 5 7 10 9 11 d 2 5 d 3 4 z z d 6 7 z z樣例輸出:
8 6 10 5 7 9 11
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.ArrayList; import java.util.List; /** * 21時47分07秒 * @author aqia358 * */ public class Main { public static int count ; static class Node{ public int data; public Node left = null; public Node right = null; public Node(int data){ this.data = data; } } public static Node find(int data,Node node){ if(node != null){ if(node.data == data) return node; else{ Node nodel = find(data, node.left); Node noder = find(data, node.right); if(nodel != null) return nodel; else if(noder != null) return noder; else return null; } }else{ return null; } } public static void doPrint(Node node){ List<Node> list = new ArrayList<Node>(); list.add(node); print(list); System.out.println(); } public static void print(List<Node> list){ if(list != null && list.size() > 0){ List<Node> son = new ArrayList<Node>(); for(Node node:list){ if(node != null){ System.out.print(node.data); if(count != 1){ count--; System.out.print(" "); } son.add(node.left); son.add(node.right); } } print(son); } } public static void main(String[] args) throws IOException { StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); while(st.nextToken() != StreamTokenizer.TT_EOF){ int n = (int)st.nval; int[] a = new int[n]; for(int i = 0; i < n; i++){ st.nextToken(); a[i] = (int) st.nval; } Node root = new Node(a[0]); for(int j = 1;j <= n; j++){ st.nextToken(); String op = st.sval; Node node = Main.find(a[j - 1], root); if(op.equals("d")){ st.nextToken(); int left = (int)st.nval; st.nextToken(); int right = (int)st.nval; node.left = new Node(a[left - 1]); node.right = new Node(a[right - 1]); }else if(op.equals("l")){ st.nextToken(); int left = (int)st.nval; node.left = new Node(a[left - 1]); }else if(op.equals("r")){ st.nextToken(); int right = (int)st.nval; node.right = new Node(a[right - 1]); } } Main.count = n; Main.doPrint(root); } } }