题目描述:
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
输入描述:
输入包括1行字符串,长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。
分析:
这道题的意思就是给定一个二叉树前序遍历的序列,然后让我们通过这个序列创建一棵二叉树,并以中序的结果打印出来。在我们对二叉树遍历熟悉之后,这道题思路还是很简单的。
在牛客网的链接上并没有给任何方法名以及节点的相关定义,因此,我们必须要定义二叉树的节点,否则在提交时就会出错!!!
定义二叉树的节点:
class BTNode{
public char val;
public BTNode left;
public BTNode right;
public BTNode(char val){
this.val=val;
this.left=null;
this.right=null;
}
}
主类:
public class Main{
public static int index=0;
//根据前序结果创建一颗二叉树
public static BTNode createTree(String str){
if(str.charAt(index)=='#')
{
return null;
}
BTNode node=new BTNode(str.charAt(index));
i++;
//创建左子树
node.left=createTree(str);
//创建右子树
i++;
node.right=createTree(str);
return node;
}
//中序遍历二叉树
public static void inOrder(BTNode tree){
if(tree==null)
{
return null;
}
inOrder(tree.left);
System.out.print(tree.val+" ");
inOrder(tree.right);
}
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
BTNode tree= createTree(str);
inOrder(tree);
}
}