编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)

例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)_第1张图片

import java.util.Scanner;
class BTNode{
    public BTNode(char val){
        this.val=val;
    }
    BTNode left=null;
    BTNode right=null;
    char val;
}
class BinTree{
    private BTNode root=null;
    int index=0;
    BinTree(String s,char invalid){
    //invalid表示空节点
        root=createBinTree(s,invalid);
    }
    //根据输入的字符串建立二叉树
    private BTNode createBinTree(String s,char invalid){
        BTNode newRoot=null;
        if(index<s.length()&&s.charAt(index)!=invalid){
            newRoot=new BTNode(s.charAt(index));
            ++index;
            newRoot.left=createBinTree(s,invalid);
            ++index;
            newRoot.right=createBinTree(s,invalid);
        }
        return newRoot;
    }
    public void inOrder(){
        inOrder(root);
        System.out.println();
    }
    //中序遍历的方法
    private void inOrder(BTNode root){
        if(null!=root){
            inOrder(root.left);
            System.out.print(root.val+" ");
            inOrder(root.right);
        }
    }
}
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        //对于IO类型的OJ题目,必须要循环输入
        while(sc.hasNextLine()){
            String s=sc.nextLine();
            BinTree bt=new BinTree(s,'#');
            bt.inOrder();
        }
    }
}

你可能感兴趣的:(Java,字符串,二叉树,java)