【二叉树】【牛客网】二叉树遍历(实际要先创建一棵二叉树)

如何创建一颗二叉树

  1. 如何创建
    ① 空树也是一棵二叉树,所以要考虑这种情况
    ② 非空:根节点–》根节点的左子树–》根节点的右子树

    ===》
    二叉树的创建方式
    按照概念进行创建–》创建根节点–》创建根节点的左右子树(由于左右子树也是二叉树,所以可以通过递归的方式创建)

  2. 节点中的数据序列如何提供?
    二叉树的创建规则–》类似于二叉树的前序遍历规则,只不过把里面的遍历操作改成创建节点的操作
    但是注意如果按照前序序列ABDECF创建的话,在创建过程中不知道节点是否有子树—这样创建出来的就是一颗左单只的二叉树
    在这里插入图片描述

    所以创建是给的序列应该时[1 2 3 # # # 4 5 # # 6]

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

import java.util.Scanner;

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

    char val = 0;
    public TreeNode(char val) {
        this.val = val;
    }
}
class BinTree {
    private TreeNode root = null;
    int i = 0;
    // 前序遍历的字符串s和s中代表空树的字符invalid 
    BinTree(String s, char invalid) {
        root = createBT(s, invalid);
    }

    // 递归创建二叉树
    public TreeNode createBT(String s, char invalid) {
        //int i = 0; 不能放在这里
        TreeNode newRoot = null;
        if (i < s.length() && s.charAt(i) != invalid) {
            newRoot = new TreeNode(s.charAt(i));
            i++;
            newRoot.left = createBT(s, invalid);

            i++;
            newRoot.right = createBT(s, invalid);
        }
        return newRoot;
    }
    
    // 中序遍历
    public void inOrder(){
        // root在BTtree里面才有,所以外部调用的时候无法传参,所以加一个无参的方法
        inOrder(root);
        System.out.println();
    }
    public void inOrder(TreeNode root){
        if(null == root){
            return;
        }
        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);
        while(sc.hasNextLine()){
            String s = sc.nextLine();
            BinTree bt = new BinTree(s,'#');
            bt.inOrder();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43360037/article/details/107896953
今日推荐