重建二叉树-java

本文介绍了一种从给定的前序和中序遍历序列构建二叉树的方法。通过递归地确定根节点,左子树和右子树的遍历序列,直至每个子树仅包含一个节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
解析:根据前序列表判断根的位置,然后在根据中序列表根节点值的位置确定左子树和右子树。然后递归调用。直到子树的遍历列表长度为1停止。

代码:

 /**
     *
     * @param preorder  前序遍历
     * @param inorder  中序遍历
     * @return
     */
    private static TreeNode buildTree(int[] preorder, int[] inorder) {
        int length = preorder.length;
        if (length == 0){
            return null;
        }
        // 只有一个元素 递归的出口,前序的长度为1
        if (length == 1){
            return new TreeNode(preorder[0]);
        }
        //确定根节点
        TreeNode root = new TreeNode(preorder[0]);
        // 在中序里面去找根节点的下标
        int index = 0;
        for (int i=0;i<inorder.length;i++){
            if (root.val==inorder[i]){
                index = i;
            }
        }
        // 取出左子树的前序遍历
        int[] leftPreTree = Arrays.copyOfRange(preorder,1,index+1);
        // 取出左子树的中序遍历
        int[] leftInTree = Arrays.copyOfRange(inorder,0,index);
        // 生成左子树  递归
        root.left = buildTree(leftPreTree,leftInTree);

        // 取出右子树的前序遍历
        int[] rightPreTree = Arrays.copyOfRange(preorder,index+1,length);
        // 取出右子树的前序遍历
        int[] rightInTree = Arrays.copyOfRange(inorder,index+1,length);
        // 生成右子树  递归
        root.right = buildTree(rightPreTree,rightInTree);

        return root;

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值