牛客网-二叉树的构建及遍历
题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: 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); } }