从上往下打印出二叉树的每一个节点,同层节点从左至右打印。 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); } } }