python练习之剑指 Offer 07. 重建二叉树
发布日期:2021-06-29 12:21:58 浏览次数:2 分类:技术文章

本文共 1314 字,大约阅读时间需要 4 分钟。

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

例如,给出

前序遍历 preorder = [3,9,20,15,7]

中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

在这里插入图片描述

限制:

0 <= 节点个数 <= 5000

来源:力扣(LeetCode)

分析

前序中序建树,递归老步骤:判断左右边界->赋值给根->找出中序中的根位置->左右递归->返回根

# Definition for a binary tree node.# class TreeNode:#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution:    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:        ##递归建树        def recursive(prel:int, prer:int, inl:int, inr:int) -> TreeNode:            if prel > prer:                return None            #建立根            root = TreeNode(preorder[prel])                        #找出目前根在inorder中的位置            i = hashtable[preorder[prel]]            #左右递归            root.left = recursive(prel+1, prel+i-inl, inl, i-1)            root.right = recursive(prel+i-inl+1, prer, i+1, inr)            return root                n = len(inorder)        #建立hashtable快速指出inorder中元素的索引        hashtable = {
num : i for i,num in enumerate(inorder) } return recursive(0, n-1, 0, n-1)

总结

1.python中的dict数据结构加上enumerate函数,用enumerate生成list对应的下表(注意,顺序是先序列号后元素),再用dict将对应元素和下表关联起来,这样的哈希映射使得我们快速找到inorder中的根位置,而不用c++中的while逐个查找(详见)
2.python中的空指针为None或nullptr,不要与c++中的NULL混淆
3.python中的函数参数列表中的格式是类似dict格式,要与c++区分开

转载地址:https://bridge-killer.blog.csdn.net/article/details/114974847 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:PAT (Advanced Level) 1147 Heaps (30 分)
下一篇:python练习之剑指 Offer 06. 从尾到头打印链表

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月15日 17时41分59秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

终端大改造:只需五步,构建你的梦中情“端” 2019-04-29
你的代码“balance”怎么样?找到简洁性和可读性的平衡点 2019-04-29
中科院刘康:低资源环境下的事件知识抽取 2019-04-29
提高软件工程技能的关键技术,这些资源赶紧收藏起来 2019-04-29
走进数据科学:最好是通过比网课更好的方法 2019-04-29
机器学习背后的数学支柱,这5本书帮你搞定! 2019-04-29
AI革命第一步:最容易被忽略但必不可少的物联网 2019-04-29
2020年开发运维工具清单:选择开发运维工具堆栈吧 2019-04-29
效率提升法则:高效人士不会去做的4件事 2019-04-29
8.PostgreSQL约束 2019-04-29
【技术分享】使用AES加密技术保障数据安全 2019-04-29
【应用实例】布线多?成本高?不可靠?泽耀方案没烦恼! 2019-04-29
数据可视化工具:Matplotlib绘图 2019-04-29
用Python写个超级小恐龙跑酷游戏,上班摸鱼我能玩一天 2019-04-29
闺蜜看我用Python画了一幅樱花图,吵着要我给他介绍程序员小哥哥 2019-04-29
【Python爬虫实战】知乎热榜数据采集,上班工作摸鱼两不误,知乎热门信息一网打尽 2019-04-29
自从我学会了数据挖掘Matplotlib、Numpy、Pandas、Ta-Lib等一系列库,我把领导开除了 2019-04-29
Python抓取哔哩哔哩up主信息:只要爬虫学的好,牢饭吃的早 2019-04-29
有个码龄5年的程序员跟我说:“他连wifi从来不用密码” 2019-04-29
领导让我整理上个季度的销售额,幸好我会Python数据分析,你猜我几点下班 2019-04-29