用先序数组和中序数组重建一棵树

该博客介绍了如何通过给定的先序遍历和中序遍历数组来重建一棵二叉树。它提供了一个名为`ConstructBinaryTreeFromPreorderAndInorderTraversal`的Java类,包含一个`buildTree`方法作为主要实现,以及一个辅助的`f`方法,用于递归地构造树的左右子节点。这种方法依赖于先序遍历中根节点的位置来划分中序遍历的子序列。
摘要由CSDN通过智能技术生成
/**
 * 用先序数组和中序数组重建一棵树
 */
public class ConstructBinaryTreeFromPreorderAndInorderTraveral {
    public static class TreeNode {
        public int val;
        public TreeNode left;
        public TreeNode right;

        TreeNode(int val) {
            this.val = val;
        }
    }

    public static TreeNode buildTree(int[] pre, int[] in) {
        if (pre == null || in == null || pre.length != in.length) {
            return null;
        }
        return f(pre, 0, pre.length - 1, in, 0, in.length - 1);
    }

    //有一棵树,先序结果是pre[l1...r1],中序in[l2...r2]
    //建成一棵树返回头节点
    public static TreeNode f(int[] pre, int l1, int r1, int[] in, int l2, int r2) {
        if (l1 > r1) {//左树为空或者佑树为空
            return null;
        }
        TreeNode head = new TreeNode(pre[l1]);
        if (l1 == r1) {
            return head;
        }
        int find = l2;
        for (; in[find] != pre[l1]; find++) ;
        head.left = f(pre, l1 + 1, l1 + (find - l2), in, l2, find - 1);
        head.right = f(pre, l1 + (find - l2) + 1, r1, in, find + 1, r2);
        return head;


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值