题目描述
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果
本题目的代码框架参考如下
三种遍历的代码框架
【图片莫名其妙不见了,也懒得再去找了】
输入
第一行输入一个整数t,表示有t个二叉树
第二行起输入每个二叉树的先序遍历结果,空树用字符‘0’表示,连续输入t行
输出
输出每个二叉树的先序遍历、中序遍历和后序遍历结果
样例输入
2
AB0C00D00
AB00C00
样例输出
ABCD
BCAD
CBDA
ABC
BAC
BCA
提示
Solution:
题目中的代码框架也写得很清楚了,先序遍历、中序遍历、后序遍历的主要区别就在于输出的位置。
import java.util.*;
/**
* @author: Liu Canbin
* @date: 2018/12/25
*/
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 treeStr = scanner.next();
BiTree biTree = new BiTree();
biTree.create(treeStr);//建立二叉树
biTree.PreOrder();//先序
biTree.InOrder();//中序
biTree.PostOrder();//后序
}
}
}
/**
* 二叉树结点
*/
class BiTreeNode
{
private char data;
BiTreeNode left;
BiTreeNode right;
public BiTreeNode(char data) {
this.data = data;
left = null;
right = null;
}
public char getData() {
return data;
}
public BiTreeNode getLeft() {
return left;
}
public void setLeft(BiTreeNode left) {
this.left = left;
}
public BiTreeNode getRight() {
return right;
}
public void setRight(BiTreeNode right) {
this.right = right;
}
}
class BiTree{
private BiTreeNode root;
private int pos;
private String strTree;
/**
* 通过传入字符串建树,'0'为空结点
* @param s
*/
public void create(String s){
pos=0;
strTree =s;
root = createTree();
}
private BiTreeNode createTree(){
BiTreeNode t;
char ch;
ch = strTree.charAt(pos++);
if (ch == '0') {
t = null;
}else {
t = new BiTreeNode(ch);
t.setLeft(createTree());
t.setRight(createTree());
}
return t;
}
public void PreOrder(){
preOrder(root);
System.out.println();
}
private void preOrder(BiTreeNode t){
if (t!=null){
System.out.print(t.getData());
preOrder(t.getLeft());
preOrder(t.getRight());
}
}
public void InOrder(){
inOrder(root);
System.out.println();
}
private void inOrder(BiTreeNode t){
if (t!=null){
inOrder(t.getLeft());
System.out.print(t.getData());
inOrder(t.getRight());
}
}
public void PostOrder(){
postOrder(root);
System.out.println();
}
private void postOrder(BiTreeNode t){
if (t!=null){
postOrder(t.getLeft());
postOrder(t.getRight());
System.out.print(t.getData());
}
}
}