根据前序和中序构建二叉树

来源:互联网 发布:java安装教程 编辑:程序博客网 时间:2024/06/05 18:20

题目:

根据二叉树的前序遍历和中序遍历构建二叉树,并进行层序遍历输出结果。

代码:

import java.util.*;//节点class Node {    int val;    Node left;    Node right;    Node(int val) {        this.val = val;    }}public class Main {    // 递归构建树    public static Node CreateTree(int[] front, int[] back) {        int len = front.length;        if (len == 0)            return null;        Node head = new Node(front[0]);        // 寻找中序的根节点        int index = 0;        for (int i = 0; i < len; i++) {            if (front[0] == back[i]) {                index = i;                break;            }        }        // 拆分2个数组        int[] frontLeft = Arrays.copyOfRange(front, 1, index + 1);        int[] frontRight = Arrays.copyOfRange(front, index + 1, len);        int[] backLeft = Arrays.copyOfRange(back, 0, index);        int[] backRight = Arrays.copyOfRange(back, index + 1, len);        head.left = CreateTree(frontLeft, backLeft);        head.right = CreateTree(frontRight, backRight);        return head;    }    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        while (in.hasNextInt()) {            int n = in.nextInt();            int[] front = new int[n];            int[] back = new int[n];            for (int i = 0; i < n; i++)                front[i] = in.nextInt();            for (int i = 0; i < n; i++)                back[i] = in.nextInt();            Node head = CreateTree(front, back);            // 层序遍历树            //使用队列来存储            Queue<Node> queue = new LinkedList<Node>();            queue.add(head);            int[] result = new int[n];            int k = 0;            while (queue.size() != 0) {                Node visitedNode = queue.remove();                result[k] = visitedNode.val;                k++;                if (visitedNode.left != null)                    queue.add(visitedNode.left);                if (visitedNode.right != null)                    queue.add(visitedNode.right);            }            //输出结果            for (int i = 0; i < n - 1; i++) {                System.out.print(result[i] + " ");            }            System.out.print(result[n - 1]);        }    }}
0 0
原创粉丝点击