由前序遍历和中序遍历构建二叉树-Python
思路:
1、由二叉树的前(先)序序列和中序序列建立该二叉树
分析:若二叉树的任意两个结点的值都不相同,则二叉树的前序序列和中序序列能唯一确定一棵二叉树。另外,由前序序列和中序序列的定义可知,前序序列中第一个结点必为根结点,而在中序序列中,根结点刚好是左、右子树的分界点,因此,可按如下方法建立二叉树:
1. 用前序序列的第一个结点作为根结点;
2. 在中序序列中查找根结点的位置,并以此为界将中序序列划分为左、右两个序列(左、右子树);
3. 根据左、右子树的中序序列中的结点个数,将前序序列去掉根结点后的序列划分为左、右两个序列,它们分别是左、右子树的前序序列;
4. 对左、右子树的前序序列和中序序列递归地实施同样方法,直到所得左、右子树为空。
例如:假设前序序列为ABDGHCEFI,中序序列为GDHBAECIF
解决:
def rebuild_tree(preorder, inorder): if len(preorder) == 0: return elif len(inorder) == 1: return TreeNode(inorder[0]) else: root = preorder[0] # 根据先序找到根节点 depth = inorder.index(root) # 找出当前节点在中序遍历的位置,左侧为左子树,右侧为右子树 temp = TreeNode(root) # 前序遍历中,去掉首节点,先序的左半边为depth,右半边为depth+1到末尾。之后递归调用rebuild_tree temp.left = rebuild_tree(preorder[1:depth+1], inorder[:depth]) temp.right = rebuild_tree(preorder[depth+1:], inorder[depth+1:]) return temp
时刻记着自己要成为什么样的人!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2018-09-06 python安装whl文件的注意事项(windows系统)