二叉树构建及遍历~

二叉树的构建及遍历(在线OJ)


描述

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

输入描述

输入包括1行字符串,长度不超过100。

输出描述

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。

示例1

输入: abc##de#g##f###

输出: c b e g d f a

分析

对于打开形如下图的这种 IO 类型的 OJ 题目,一般的做题步骤
在这里插入图片描述

  • (1)需要创建一个Main类
  • (2)需要提供一个main方法
  • (3)需要循环接收每个测试用例
  • (4)有必要时,需要导入所用的包
import java.util.Scanner;

public class Main {
    //定义结点
    public static class TreeNode{
        char value ;
        TreeNode left;
        TreeNode right;

        //构造方法
        public TreeNode(char value){
            this.value=value;
        }
    }
       TreeNode root; //指向二叉树的根结点
        int index;
      public void createBinaryTree(String preStr,char invalid){
       index=0;
      root=createBinaryTreeN(preStr,invalid);
   }
          //创建二叉树
          //invalid表示无效的字符
     TreeNode createBinaryTreeN(String preStr,char invalid){
         TreeNode treeRoot=null;
          if( index<preStr.length() && preStr.charAt(index)!=invalid){
            //创建根结点
          treeRoot=new TreeNode(preStr.charAt(index));

             //创建根结点的左子树
            ++index;
           treeRoot.left=createBinaryTreeN(preStr,invalid);

              //创建根结点的右子树
             ++index;
            treeRoot.right=createBinaryTreeN(preStr,invalid);

            }
            return treeRoot;
        }

        //中序遍历
     public void InOrder(){
          InOrder(root);
        System.out.println();
    }
    private void InOrder(TreeNode treeRoot){
        if(treeRoot!=null){
           //先遍历根的左子树
        InOrder(treeRoot.left);
           //再遍历根结点
        System.out.print(treeRoot.value+" ");
           //遍历根的右子树
         InOrder(treeRoot.right);
      }
    }
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            //接收前序遍历的结果
            String str=sc.nextLine();
            Main tree=new Main();
            tree.createBinaryTree(str,'#');
            tree.InOrder();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值