Java construit un arbre binaire basé sur la traversée de préordre

Construire un arbre binaire basé sur la traversée de préordre

description du sujet

Écrivez un programme qui lit une chaîne de chaînes de parcours de préordre entrées par l'utilisateur et construit un arbre binaire (stocké par des pointeurs) basé sur les chaînes. Par exemple, la chaîne de parcours de préordre suivante : ABC##DE#G##F### où "#" représente un espace et le caractère d'espace représente un arbre vide. Une fois l'arbre binaire établi, effectuez un parcours dans l'ordre sur l'arbre binaire et affichez le résultat du parcours.
Description de l'entrée :
L'entrée consiste en 1 ligne de chaînes dont la longueur ne dépasse pas 100.
Description du résultat :
il peut y avoir plusieurs ensembles de données de test. Pour chaque ensemble de données, affichez la séquence de parcours dans l'ordre une fois que la chaîne d'entrée a été créée sous la forme d'un arbre binaire. Il y a un espace après chaque caractère. Chaque sortie prend une ligne.

exemple

insérez la description de l'image ici

Titre original lien JO

https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId=60&&tqId=29483&rp=1&ru=/activity/oj&qru=/ta/tsing-kaoyan/question-ranking

répondre

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
class   TreeNode{
    
    //创建一个树结点的类,这个类最后不要构建在Main类了里面,构建在里面是内部类
        char val;
        TreeNode left;
        TreeNode right;

        public TreeNode(char ch){
    
    
            this.val = ch;
            this.left = null;
            this.right = null;
        }

}
public class Main {
    
     
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) {
    
     // 注意 while 处理多个 case
            String str = in.nextLine();
            TreeNode root = creatTree(str);
            midOrder(root);
        }
    }
    public static int i = 0;//必须是静态的,不然在creatTree这个静态方法里面没法用
    //构建二叉树
    public static TreeNode creatTree(String str){
    
    
        TreeNode root = null;
        if(str.charAt(i) != '#'){
    
    //只要值不是#,就证明是结点,所以先把结点创建出来
            root = new TreeNode(str.charAt(i));
            i++;
            root.left = creatTree(str);
            root.right = creatTree(str);
        }
        else{
    
    
           i++;//本题是不需要判断i是否越界的,因为只有给定的str是合法的前驱遍历,那么i就不会无限增加,因为有递归次数做保证

        }
        return root;

    }
    //中序遍历
    public static void midOrder(TreeNode root){
    
    
        if(root == null){
    
    
            return;
        }
        midOrder(root.left);
        System.out.print(root.val + " ");
        midOrder(root.right);

    }
}

Je suppose que tu aimes

Origine blog.csdn.net/baixian110/article/details/130954430
conseillé
Classement