输入(在空子树处添加空格字符或“*”的二叉树,本例中以“*”判断空子树)先序序列(设每个元素是一个字符),按先序遍历的顺序,建立二叉链表,并将该二叉链表根结点指针赋给root 。
如果输入字符不是“*”,则建立一个新结点,然后建立其左子树和右子树;如果是空格则返回,继续进行下一次操作。
输入:一个包含空子树符号的先序序列,例如:序列ABC**DE**F**G**
输出:建立一颗二叉链表表示的二叉树T,根指针为root,结果输出先序遍历二叉树后的序列A B C D E F G
import java.util.Scanner;
public class InOrder {
static int count = 0;
// 创建节点
public static class Node {
private char data;
private Node left = null;
private Node right = null;
public Node(char data) {
this.data = data;
}
}
// 先序创建二叉树
public static Node create(String datas) {
Node root = null;
char c = datas.charAt(count);
if (c != '*') {
root = new Node(c);
count++;
root.left = create(datas);
count++;
root.right = create(datas);
}
return root;
}
// 输出二叉树
public static void prePrint(Node root) {
System.out.print(root.data);
if (root.left != null) {
prePrint(root.left);
}
if (root.right != null) {
prePrint(root.right);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入先序序列:");
String datas = scanner.next();
Node root = create(datas);
prePrint(root);
}
}
欢迎关注公众号算法小生第一时间获取更多精彩内容