LeetCode 105,106. Construct Binary Tree 重建二叉树 Python Solution

来源:互联网 发布:怎样添加图表数据 编辑:程序博客网 时间:2024/06/05 01:18

此题目对应于105. Construct Binary Tree from Preorder and Inorder Traversal 和 106. Construct Binary Tree from Inorder and Postorder Traversal

题目要求:

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

重建二叉树是二叉树的基本操作,通常给出二叉树的中序和前序或者后续的遍历,并要求重建二叉树。

这里必须给出两个遍历才可以重建二叉树,其中前序或者后续的遍历能给出树根节点的值,

中序遍历起到划分二叉树左右子树的作业。

距离说明:输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示的二叉树并输出它的头结点。


解题思路:

根据先序向量数组的值把中序向量数组一分为二,然后递归左右部分;

在二叉树的前序遍历和中序遍历的序列中确定根结点的值、左子树结点的值和右子树结点的值的步骤如下图所示:



下面给出Python代码:

# -*- coding:utf-8 -*-class TreeNode:     def __init__(self, x):         self.val = x         self.left = None         self.right = None'''输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。'''class Solution(object):    # 根据前序和中序遍历重建二叉树    def buildTree(self, preorder, inorder):        if len(preorder)==0:            return None        if len(preorder)==1:            return TreeNode(preorder[0])        root_val = preorder[0]        idx = inorder.index(root_val)        root = TreeNode(root_val)        root.left = self.buildTree(preorder[1:idx+1],inorder[:idx])        root.right = self.buildTree(preorder[idx+1:],inorder[idx+1:])        return root    # 根据后序和中序遍历重建二叉树       def buildTree(self, inorder, postorder):        if len(inorder)==0:            return None        if len(inorder)==1:            return TreeNode(inorder[0])        root_v = postorder[-1]        root = TreeNode(root_v)        idx = inorder.index(root_v)        root.left = self.buildTree(inorder[:idx],postorder[:idx])        root.right = self.buildTree(inorder[idx+1:],postorder[idx:-1])        return root                """        :type inorder: List[int]        :type postorder: List[int]        :rtype: TreeNode        """        


参考文献:

http://www.cnblogs.com/edisonchou/p/4741099.html


阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑网卡被禁用了怎么办 win8系统装win7蓝屏怎么办 联想笔记本装win7蓝屏怎么办 联想g40-70开机黑屏怎么办 新主机开不了机怎么办 联想720s笔记本闪屏怎么办 华硕k40ie显卡坏了怎么办 开机黑屏进入bois后怎么办 2根内存条不兼容怎么办 联想笔记本r720系统崩溃怎么办 联想天逸310卡怎么办 新买的鼠标没反应怎么办 联想笔记本触屏鼠标失灵怎么办 无线鼠标接收器丢了怎么办 联想笔记本系统重装失败怎么办 联想笔记本屏幕闪屏怎么办 种植牙螺钉掉了怎么办 水管牙断里面了怎么办 水龙头起泡器不起泡怎么办 14mm乘8mm残留怎么办 宝宝吃了螺丝冒怎么办 收割机滚筒皮带轮键槽滚了怎么办 微信界面变小了怎么办 拉杆箱螺丝掉了怎么办 洗衣机应急门锁没有拉绳怎么办? 奔驰glc发动机声音大怎么办 淋膜机模具螺丝拧不动怎么办 一字螺丝滑丝了怎么办 螺丝拧歪卡住了怎么办 车牌螺丝拧歪了怎么办 空心墙打膨胀螺丝打不上怎么办 沉孔内六角螺丝滑丝怎么办 内六角螺丝滑了怎么办? 三色灯不变光了怎么办 卧室灯不变色了怎么办 圆柱齿轮减速机噪音大怎么办 轴与套间隙生锈怎么办 汽车停小区被刮怎么办 下楼梯摔跤了 屁股疼 怎么办 剧烈咳嗽震的肚子疼怎么办 饺子粘在盘子上怎么办