IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 剑指offer-python:5.重建二叉树 -> 正文阅读

[数据结构与算法]剑指offer-python:5.重建二叉树

说明:

给定两个整数数组 preorder 和 inorder,其中 preorder 是二叉树的前序遍历,inorder 是同一棵树的中序遍历,构造并返回二叉树。

输入:preorder = [3,9,20,15,7],inorder = [9,3,15,20,7]
输出:[3,9,20,null,null,15,7]

解析:

1.递归思想

2.前序遍历:根结点 ---> 左子树 ---> 右子树

3.中序遍历:左子树--->?根结点?---> 右子树

4.后序遍历:左子树 ---> 右子树?---> 根结点

例如:

前序遍历:1 ?2 ?4 ?5 ?7 ?8 ?3 ?6

中序遍历:4 ?2 ?7 ?5 ?8 ?1 ?3 ?6

后序遍历:4 ?7 ?8 ?5 ?2 ?6 ?3 ?1?

-----------------------------------------------------------------------------------------------------

输入的preorder = [1,2,4,7,3,5,6,8] , inorder =[4,7,2,1,5,3,8,6]

代码:

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
class Solution:
    # 返回构造的TreeNode根节点
    def __init__(self):
        pass

    def reConstructBinaryTree(self, pre, tin):
        # write code here
        if len(pre) == 0:
            return None
        if len(pre) == 1:
            return TreeNode(pre[0])
        else:
            res = TreeNode(pre[0])
            res.left = self.reConstructBinaryTree(pre[1: tin.index(pre[0]) + 1], tin[: tin.index(pre[0])])
            res.right = self.reConstructBinaryTree(pre[tin.index(pre[0]) + 1: ], tin[tin.index(pre[0]) + 1: ])
        return res

front = [1,2,4,7,3,5,6,8]
mid = [4,7,2,1,5,3,8,6]
algo = Solution()
x = algo.reConstructBinaryTree(pre=front , tin=mid)

代码流程:

front = [1,2,4,7,3,5,6,8]
mid = [4,7,2,1,5,3,8,6]
-------
1-node = 1 , index = mid.index(1) = 3
res.left = (pre = [2,4,7] , tin = [4,7,2])
	2-node = 2 ,index = tin.index(2) = 2
	res.left = (pre = [4,7] , tin = [4,7])
		3-node = 4 , index = tin.index(4) = 0
		res.left = (pre = [] , tin = [])
		res.right = (pre = [7] , tin = [7])
			node-right = 7
	res.right = (pre = [] , tin = [])

res.right = (pre = [3,5,6,8] , tin = [5,3,8,6])
	4-node = 3 , index = tin.index(3) = 1
	res.left = (pre = [5] , tin =[5])
		node = 5
	res.right = (pre = [6 , 8] , tin=[8,6])
		5-node = 6 , index = tin.index(6) = 1
		res.left = (pre = [8] , tin = [8])
			node-left = 8
		res.right = (pre = [] , tin = [])

最终的二叉树如下:?

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:28:07  更:2021-07-15 16:28:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:42:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码