Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal
2016-07-05 00:36
501 查看
题目大意
给出二叉树的前序与中序遍历,返回该二叉树算法
很简单,递归的去做前序第一个点为当前子树的根节点,在中序中寻找该节点,以此节点进行划分,左边为根节点左子树中序,右边为根节点的右子树中序。
前序的划分利用中序划分的结果,左子树前序等于list[1 … 1+len(左子树中序)]
,右子树中序等于list[1+len(左子树中序) … 最后]
代码
You are here!Your runtime beats 95.32% of pythonsubmissions
class Solution(object): def addTree(self, preorder_start,preorder_end,inorder_start,inorder_end): if preorder_end <= preorder_start or inorder_end <= inorder_start: return None head_num = self.preorder[preorder_start] head = TreeNode(head_num) head_index = self.dict[head_num] length = head_index - inorder_start + 1 head.left = self.addTree(preorder_start+1,preorder_start + length,inorder_start,head_index) head.right = self.addTree(preorder_start + length,preorder_end,head_index+1,inorder_end) return head def buildTree(self, preorder, inorder): """ :type preorder: List[int] :type inorder: List[int] :rtype: TreeNode """ if len(preorder) == 0: return None self.preorder = preorder self.inorder = inorder self.dict = {} i = 0 for ele in inorder: self.dict[ele] = i i += 1 length = len(preorder) return self.addTree(0,length,0,length)
相关文章推荐
- node
- 【leetcode】23. Merge k Sorted Lists
- view的setTag() 和 getTag()应用
- 淘宝开源Web服务器Tengine基本安装步骤
- Java ssh的实现具体步骤
- MySQL实践-连接表-内连接(一)
- EasySwift/EasySearchBar 自定义SearchBar
- 【leetcode】22. Generate Parentheses
- 原生app与web app的比较
- 第二课:Android Studo 各文件作用-20160705
- 学生成绩管理系统
- 先验概率,似然函数和后验概率
- 4.2 最近邻规则分类算法(KNN)应用
- 【leetcode】 21. Merge Two Sorted Lists
- Spring(三):IoC容器装配Bean(xml配置方式和注解方式)
- nagios nrpe插件读文件时注意是否拥有权限
- C的游戏
- EasySwift/YXJTagView 极其强大的标签框架,不仅可以填充文字,任意视图都可以
- Android Studio编译输出apk文件修改文件名
- Android开发者已经渡过了初级吗