根据二叉树的先序遍历和中序遍历重建二叉树

来源:互联网 发布:数据备份的管理规范 编辑:程序博客网 时间:2024/04/29 04:00

题目:

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。


程序:

public class Solution {public static void main(String[] args) {int[] pre = {1,2,3,4,5,6,7};int[] in = {3,2,4,1,6,5,7};TreeNode root = reConstructBinaryTree(pre, in);print(root);}public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {        return construct(pre, in, 0, 0, pre.length - 1);    }     private static TreeNode construct(int[] pre, int[] in, int index, int l, int r) {        int inIndex;        if (index >= pre.length || (inIndex = indexOf(pre[index], in)) < l || inIndex > r)            return null;        TreeNode pNode = new TreeNode(pre[index]);        pNode.left = construct(pre, in, index + 1, l, inIndex - 1);        pNode.right = construct(pre, in, index + inIndex - l + 1, inIndex + 1, r);        return pNode;    }     private static int indexOf(int target, int[] arr) {        for (int i = 0; i < arr.length; i++) {            if (target == arr[i])                return i;        }        return -1;    }    //节点    static class TreeNode {      int val;      TreeNode left;      TreeNode right;      TreeNode(int x) { val = x; }}public static void print(TreeNode p) {System.out.print(p.val + " ");if (p.left != null)print(p.left);if (p.right != null)print(p.right);}}


阅读全文
0 0
原创粉丝点击