牛客网-二叉树的构建及遍历

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

示例:

输入:

abc##de#g##f###

输出:

c b e g d f a

源码:

import java.util.Scanner;

public class Main {
          
   
    static class TreeNode {
          
   
        private char val;
        private TreeNode left;
        private TreeNode right;

        public TreeNode(char val) {
          
   
            this.val = val;
        }
    }

    public static void main(String[] args) {
          
   
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
          
   
            String line = scanner.next();
            // line 是一组先序遍历的结果
            TreeNode root = buildTree(line);
            // 中序遍历输出结果
            inOrder(root);
            System.out.println();
        }
    }

    // index 是为了知道当前是字符串的第几个元素
    private static int index = 0;
    public static TreeNode buildTree(String line) {
          
   
        index = 0;
        return createTreePreOrder(line);
    }

    public static TreeNode createTreePreOrder(String line) {
          
   
        char c = line.charAt(index);
        if (c == #) {
          
   
            return null;
        }
        TreeNode root = new TreeNode(c);
        index++;
        root.left = createTreePreOrder(line);
        index++;
        root.right = createTreePreOrder(line);
        return root;
    }

    public static void inOrder(TreeNode root) {
          
   
        if (root == null) {
          
   
            return;
        }
        inOrder(root.left);
        System.out.print(root.val + " ");
        inOrder(root.right);
    }
}
经验分享 程序员 微信小程序 职场和发展