Java数据结构中二叉树的创建及其遍历(牛客网)


前言

关于IO类型的OJ题目要注意:
1.需要创建Main类
2.需要提供一个main方法
3.需要循环接收每个测试用例
4.需要用户自己导入所需要的包

一、题目描述

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

二、输入输出描述

输入: 输入包括1行字符串,长度不超过100。
输出: 可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。
示例:
输入:abc##de#g##f###
输出:c b e g d f a

三、代码实现

import java.util.Scanner;

public class Main{
    //二叉树的结点进行定义
    public static class BTNode{
        BTNode left;
        BTNode right;
        char val;
        
        BTNode (char val){
            this.val=val;
        }
    }
    
    //二叉树的根结点
    BTNode root;
    
    //给出索引
    int index;
    
    //给下面的创建二叉树的方法包装一层
    public void createBinaryTree(String preStr,char invalid){
        index=0;
        root=createBinaryTreeN(preStr,invalid);
    }
    
    //创建二叉树
    BTNode createBinaryTreeN(String preStr,char invalid){
        BTNode treeRoot=null;
        if(index<preStr.length()&&preStr.charAt(index)!=invalid){
            //创建根结点
            treeRoot=new BTNode(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();
    }
    
    //对二叉树进行中序遍历,前面写到过
    public void inOrder(BTNode treeRoot){
        if(treeRoot!=null){
            inOrder(treeRoot.left);
            System.out.print(treeRoot.val+" ");
            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();
        }
    }
}

关于invalid的解释:
#表示空格,空格字符代表空树,将invalid单独给出是为了实际应用时随着代表空树的不同字符更容易改变,直接更改主方法中传入参数的值即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dhdhdhdhg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值