先序序列建立一颗二叉树

输入(在空子树处添加空格字符或“*”的二叉树,本例中以“*”判断空子树)先序序列(设每个元素是一个字符),按先序遍历的顺序,建立二叉链表,并将该二叉链表根结点指针赋给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);
    }
}

欢迎关注公众号算法小生第一时间获取更多精彩内容

猜你喜欢

转载自blog.csdn.net/SJshenjian/article/details/53086501