栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

NC12 重建二叉树

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NC12 重建二叉树

和力扣的105题一样~
果然,做了的题是会忘记的,虽然依稀还能记住一点儿。

思路:
#递归base:
当prestart>preend跳出递归~

1、从前序里找根,从中序里找根对应的索引。
2、找到每次左、右子树的起始和终点。
3、递归建立左右子树。

方法1:java
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
        return build(pre,0,pre.length-1,vin,0,vin.length);
    }
    
    public TreeNode build(int [] pre, int prestart, int preend, int [] vin, int vinstart, int vinend){
        if (prestart>preend) return null;
        
        //找根值在中序中对应的索引
        int rootvar=pre[prestart];
        int flag=0;
        for (int i=0; i 


方法2:python

class Solution:
    def reConstructBinaryTree(self , pre: List[int], vin: List[int]) -> TreeNode:
        # write code here
        def build(pre,prestart,preend,vin,vinstart,vinend):
            flag=0
            if prestart>preend: return
            
            #找根对用的索引喵,在中序中找索引~
            rootvar=pre[prestart]
            for i in range(len(vin)):
                if rootvar==vin[i]:
                    flag=i
                    break
            
            #建立左右子树喵
            leftsize=flag-vinstart
            root=TreeNode(rootvar)
            root.left=build(pre,prestart+1,prestart+leftsize,vin,vinstart,flag-1)
            root.right=build(pre,prestart+leftsize+1,preend,vin,flag+1,vinend)
            
            return root
        
        return build(pre,0,len(pre)-1,vin,0,len(vin)-1)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号