从前序与中序遍历序列构造二叉树

本文介绍了一种使用前序遍历和中序遍历序列构建二叉树的方法。通过递归算法,利用HashMap存储中序遍历序列的节点值和坐标,快速定位根节点并划分左右子树,最终重构出完整的二叉树结构。

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


import java.util.HashMap;

public class PreInToTree {
    public static TreeNode preInToTree(int[] pre,int[] in){
        if(pre==null||in==null){
            return null;
        }

        //map存储中序遍历序列,key节点值,value:节点坐标,用于查询头节点在中序序列中的坐标
        HashMap<Integer, Integer> map = new HashMap<>(8);
        for(int i=0;i<in.length;i++){
            map.put(in[i],i);
        }

        return preIn(pre,0,pre.length-1,in,0,in.length-1,map);
    }


    public static TreeNode preIn(int[] pre, int pl, int pr, int[] in, int il, int ir, HashMap<Integer,Integer> map){
        if(pl>pr){
            return null;
        }

        //前序序列第一个元素为头节点
        TreeNode head = new TreeNode(pre[pl]);

        //获取头在中序的坐标,进而得出划分子树的边界值
        int index = map.get(pre[pl]);

        //pl,pr,分别为前序序列的左右边界。il,ir,分别为中序遍历的左右边界,递归构造左右子树
        head.left = preIn(pre, pl+1, pl + index - il, in, il, index-1, map);
        head.right=preIn(pre,pl + index - il+1,pr,in,index+1,ir,map);
        return head;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值