博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【九度OJ1523】从上往下打印二叉树
阅读量:5992 次
发布时间:2019-06-20

本文共 2743 字,大约阅读时间需要 9 分钟。

hot3.png

题目描述:

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

输入:

输入可能包含多个测试样例,输入以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
解:先将根保存到一个list中,打印这个list,并将其左右孩子放到另一个list中,递归打印这个list
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
list = 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); } }}

转载于:https://my.oschina.net/u/1182234/blog/187068

你可能感兴趣的文章
在EditPlus中使用代码格式化插件
查看>>
MYSQL主从复制部署流程
查看>>
Java中的增强 for 循环 foreach
查看>>
Webpack 资源管理
查看>>
JSP原理与脚本元素
查看>>
关于cisco2911/k9
查看>>
dd测试硬盘性能
查看>>
第二天
查看>>
exportfs命令、客户端文件属主属组nobody解决办法
查看>>
六、GIT
查看>>
nginx配置ssl证书实现https访问
查看>>
百晓生带你玩转linux系统服务搭建系列----DNS服务的搭建一(正向解析)
查看>>
老男孩50期linux高级运维—决心书
查看>>
UML学习---用例图
查看>>
给大家分享学好 Python 的 11 个优秀资源
查看>>
在古巴买雪茄又不知道怎么选?这里为你推荐几款古巴雪茄中的极品
查看>>
跨过Nginx上基于uWSGI部署Django项目的坑
查看>>
10.开机启动脚本,用户文件含义《Mr.Robot》
查看>>
python字符串格式化
查看>>
管理员必备的20个Linux系统监控工具
查看>>