leetcode之重建二叉树

本文探讨如何利用前序遍历和中序遍历结果重建二叉树,通过递归算法实现,详细解析了算法步骤及代码实现,旨在帮助读者深入理解二叉树的遍历与重构。

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

  • 最头疼的就是做树的题目了,虽然说遇到树,想到的就是递归,想到的就是深度优先搜索,但是总感觉没有get到它的精华所在。
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
 	3
   / \
  9  20
    /  \
   15   7

附上原题链接

  • 对于这道题目,前序遍历的第一个节点一定是这个树或者某个子树的根节点,那么这样就好办了,遍历前序数组,然后在中序遍历数组中找到相应的数所在位置,就可以将在中序遍历中划分出左子树和右子树了,然后递归进行
    思路
class Solution {
    HashMap<Integer,Integer> map = new HashMap();
    int ind = 0;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        int index = 0;
        for(int i:inorder){
            map.put(i,index++);
        }
        return help(preorder,0,inorder.length);
    }
    public TreeNode help(int[] preorder,int left,int right){
        if(left == right){
            return null;
        }
        //每次遍历先序列表的第一个节点一定是数的或者时子树的根节点
        TreeNode root = new TreeNode(preorder[ind]);
        //找到这个根节点在中序遍历中的位置
        int index = map.get(preorder[ind]);
        //为了获取前序遍历的下一个节点
        ind++;
        //寻找根的左节点
        root.left = help(preorder,left,index);
        //寻找根的右节点
        root.right = help(preorder,index+1,right);
        return root;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值