对于给定的二叉树,输出其先序序列、中序序列、后序序列并输出叶子结点数。
输入格式: 二叉树的先序遍历序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式: 若是非空二叉树,则输出四行内容 第一行是二叉树的先序遍历序列; 第二行是二叉树的中序遍历序列; 第三行是二叉树的后序遍历序列; 第四行是叶子结点数;
若是空二叉树 只需输出叶子数0
输入样例1: FCA##DB###EHM###G## 输出样例1: FCADBEHMG ACBDFMHEG ABDCMHGEF 4 输入样例2:
输出样例2: 0
import java.util.*;
public class Main {
static String g = null;
static int index = 0;
static int to = 0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
g = s;
Node root = creat();
if(root!=null){
StringBuilder sb = new StringBuilder();
a(root,sb);
System.out.println(sb);
sb.setLength(0);
b(root,sb);
System.out.println(sb);
sb.setLength(0);
c(root,sb);
System.out.println(sb);
}
System.out.println(to);
}
static void c(Node root,StringBuilder sb){
if(root ==null)return;
c(root.left,sb);
c(root.right,sb);
sb.append(root.c);
}
static void b(Node root,StringBuilder sb){
if(root ==null)return;
b(root.left,sb);
sb.append(root.c);
b(root.right,sb);
}
static void a(Node root,StringBuilder sb){
if(root ==null)return;
if(root.c=='['){
root=null;
return;
}
if((root.left== null)&&(root.right==null)){
to++;
}
sb.append(root.c);
a(root.left,sb);
a(root.right,sb);
}
static Node creat(){
if(index>=g.length())return null;
char myc = g.charAt(index++);
if(myc == '#'){
return null;
}
Node root = new Node();
root.c = myc;
root.left = creat();
root.right = creat();
return root;
}
static class Node{
public char c;
public Node left;
public Node right;
}
}
|