题目描述:
解:先将根保存到一个list中,打印这个list,并将其左右孩子放到另一个list中,递归打印这个list 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
输入:输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。 Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。 Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。 Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。 Ci=’z’表示第i个节点没有子孩子。 输出:对应每个测试案例,
按照从上之下,从左至右打印出二叉树节点的值。 样例输入:78 6 5 7 10 9 11d 2 5d 3 4zzd 6 7zz样例输出:
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){ Listlist = new ArrayList (); list.add(node); print(list); System.out.println(); } public static void print(List list){ if(list != null && list.size() > 0){ List son = new ArrayList (); 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); } }}