DS二叉树--层次遍历
这题比较简单,用上一题建好的树,直接A掉,不过要注意输出格式,输出一棵树的时候忘记换行了,结果oj显示答案错误,懵逼了一小会。
题目描述
层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点。
建树方法采用“先序遍历+空树用0表示”的方法
输入
第一行输入一个整数t,表示有t个测试数据
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行
输出
逐行输出每个二叉树的层次遍历结果
样例输入
2
AB0C00D00
ABCD00E000FG00H0I00
样例输出
ABDC
ABFCGHDEI
Solution:
import java.util.*;
/**
* @author: Liu Canbin
* @date: 2019/1/4
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = 0; i <n ; i++) {
String s = scanner.next();
Tree tree = new Tree();
tree.create(s);
tree.levelOrderShow();
System.out.println();
}
}
}
class Node
{
char data;
Node left;
Node right;
Node(char ch){
data =ch;
left = null;
right = null;
}
public void setLeft(Node left) {
this.left = left;
}
public void setRight(Node right) {
this.right = right;
}
}
class Tree{
Node root;
int pos;
String strTree;
int sum;
void create(String s){
pos = 0;
strTree = s;
sum =0;
root =createTree();
}
Node createTree(){
Node t;
char ch = strTree.charAt(pos++);
if (ch=='0'){
t = null;
}else {
t = new Node(ch);
t.setLeft(createTree());
t.setRight(createTree());
}
return t;
}
void levelOrderShow() {
levelOrder(root);
}
private void levelOrder(Node t){
Queue<Node> queue = new LinkedList<Node>();
queue.offer(t);
while (!queue.isEmpty()){
Node node = queue.poll();
if (node.left!=null){
queue.offer(node.left);
}
if (node.right!=null){
queue.offer(node.right);
}
System.out.print(node.data);
}
}
}