先以先序建立一个二叉树,然后再将此二叉树以中序遍历输出

先以先序建立一个二叉树,然后再将此二叉树以中序遍历输出_第1张图片

此题的重点在于如何按照题目描述的顺序建立二叉树

    public static Node buildTree(String s) {
     
        //以中序遍历创建二叉树
        if (s.charAt(i) != '#') {
     //如果不是空
            Node root = new Node(s.charAt(i));//根是当前i的值
            i++;//i移动一位到下一位
            root.left = buildTree(s);
            i++;//再移动一位
            root.right = buildTree(s);
            return root;
        }
        return null;//如果是#就返回空
    }

解决办法:先定义一个全局变量i ,是输入字符串的下标
因为是先序遍历,所以先把根的值顶下,然后用递归的方法一步一步把左子树和右子树搞定

第二个点是将已有的二叉树进行遍历输出,就要用到以前的中序遍历

    public static void inOder(Node root) {
     
        if (root != null) {
     
            inOder(root.left);
            System.out.print(root.val + " ");
            inOder(root.right);
        }
    }

很简单没什么说的

附上全部代码:

import java.util.Scanner;
class Node {
     
    char val;
    Node left;
    Node right;
    public Node (char val) {
     
        this.val = val;
    }
}
public class Main {
     
    static int i = 0;

    public static Node buildTree(String s) {
     
        //以中序遍历创建二叉树
        if (s.charAt(i) != '#') {
     //如果不是空
            Node root = new Node(s.charAt(i));//根是当前i的值
            i++;//i移动一位到下一位
            root.left = buildTree(s);
            i++;//再移动一位
            root.right = buildTree(s);
            return root;
        }
        return null;//如果是#就返回空
    }

    public static void inOder(Node root) {
     
        if (root != null) {
     
            inOder(root.left);
            System.out.print(root.val + " ");
            inOder(root.right);
        }
    }

    public static void main(String[] args) {
     
        //获取输入
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        //建立中序遍历的树
        Node root = buildTree(line);
        //中序遍历
        inOder(root);
        System.out.println();
    }
}

对牛客的题还是比较害怕的,做的比较少而且牛客上的题好多不给接口让你自己写,就很烦!!

你可能感兴趣的:(先以先序建立一个二叉树,然后再将此二叉树以中序遍历输出)