Python算法——树的重建

Python中的树的重建算法详解

树的重建(Tree Reconstruction)是一种从给定的遍历序列中恢复原树结构的算法。在本文中,我们将讨论树的重建问题以及常见的重建算法,包括先序遍历和中序遍历序列重建二叉树,以及层序遍历序列重建二叉树。我们将提供Python代码实现,并详细说明每个算法的原理和步骤。

1. 先序遍历和中序遍历序列重建二叉树

给定一个二叉树的先序遍历序列和中序遍历序列,我们可以通过递归地进行树的重建。先序遍历序列的第一个元素为根节点,在中序遍历序列中找到该元素,将其分为左子树和右子树,然后递归对左右子树进行同样的操作。

class TreeNode:def __init__(self, value):self.val = valueself.left = Noneself.right = Nonedef build_tree(preorder, inorder):if not preorder or not inorder:return Noneroot_val = preorder[0]root = TreeNode(root_val)index = inorder.index(root_val)root.left = build_tree(preorder[1:index + 1], inorder[:index])root.right = build_tree(preorder[index + 1:], inorder[index + 1:])return root

2. 层序遍历序列重建二叉树

给定一个二叉树的层序遍历序列,我们可以使用队列来逐层构建树结构。队列中的每个元素代表一个树节点,我们按照层序遍历的顺序依次将节点加入队列,并根据队列中的顺序建立树的连接关系。

from collections import dequedef build_tree_level_order(level_order):if not level_order:return Noneroot = TreeNode(level_order[0])queue = deque([root])i = 1while i < len(level_order):current = queue.popleft()left_val = level_order[i]i += 1if left_val is not None:current.left = TreeNode(left_val)queue.append(current.left)right_val = level_order[i]i += 1if right_val is not None:current.right = TreeNode(right_val)queue.append(current.right)return root

示例

示例1:先序遍历和中序遍历序列重建二叉树
preorder = [3, 9, 20, 15, 7]
inorder = [9, 3, 15, 20, 7]root = build_tree(preorder, inorder)# 验证重建的树
def inorder_traversal(root):if root is not None:inorder_traversal(root.left)print(root.val, end=" ")inorder_traversal(root.right)print("Inorder Traversal of Reconstructed Tree:")
inorder_traversal(root)

输出结果:

Inorder Traversal of Reconstructed Tree:
9 3 15 20 7 
示例2:层序遍历序列重建二叉树
level_order = [3, 9, 20, None, None, 15, 7]root_level_order = build_tree_level_order(level_order)# 验证重建的树
def inorder_traversal_level_order(root):if root is not None:inorder_traversal_level_order(root.left)print(root.val, end=" ")inorder_traversal_level_order(root.right)print("Inorder Traversal of Reconstructed Tree from Level Order:")
inorder_traversal_level_order(root_level_order)

输出结果:

Inorder Traversal of Reconstructed Tree from Level Order:
9 3 15 20 7 

以上两个示例演示了树的重建算法的使用,分别使用先序遍历和中序遍历序列,以及层序遍历序列重建二叉树。这些算法在树的序列化和反序列化中起到关键作用,通过理解其原理和实现,您将能够更好地处理树结构的相关问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Electron 来替代本地调试线上代理的场景

Cookie Samesite 问题 https://developers.google.com/search/blog/2020/01/get-ready-for-new-samesitenone-secure?hlzh-cnhttps://www.chromium.org/updates/same-site/https://github.com/GoogleChromeLabs/samesite-exampleshttps://releases.electronjs.org/releases/s…

python3中split()函数和int()函数的坑

&#xff08;一&#xff09; python3中的split()函数如果传入一个空字符&#xff0c;就会返回一个列表&#xff0c;该列表中有一个元素&#xff0c;此元素为空字符串。见如下代码&#xff0c; a "".split(",") for i,x in enumerate(a):print(f"i{i…

如何使用 docker 在本地部署 vite 项目

如何使用 docker 在本地部署 vite 项目 创建 Dockerfile 文件创建.dockerignore 文件构建镜像运行容器 1. 创建 Dockerfile 文件 # 使用官方的 Node 镜像作为基础镜像 FROM node:16.15.1# 设置工作目录 WORKDIR /usr/src/app# 将本地的 Vite 项目文件复制到工作目录 COPY . …

PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航

内存管理是计算机科学中至关重要的一部分&#xff0c;它涉及到操作系统、硬件和软件应用之间的动态交互。有效的内存管理可以确保系统的稳定性和安全性&#xff0c;提高系统运行效率&#xff0c;帮助我们最大限度地利用有效的内存资源&#xff0c;合理分配和回收内存&#xff0…

【SQLite】的使用及指令| 编程操作(增删改查)

一、SQLite 使用和指令集 SQLite 的基本使用SQL 命令 二、常见的 SQL 数据类型 三、SQLite的命令用法 四、SQLite的编程操作 五、sqlite3_open函数 六、sqlite3_close函数 七、sqlite3_errcode函数 八、SQLite C Interface 九、sqlite3_exec函数 十、callback回调函数 十一、…

YOLOV5----修改损失函数-ShuffleAttention

主要修改yolo.py、yolov5s.yaml及添加ShuffleAttention.py 一、ShuffleAttention.py import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def

RemoteWebDriver 远程启动Driver版本问题

由于系统部署原因&#xff0c;本地调试UI自动化脚本的时候&#xff0c;页面加载非常慢&#xff01;于是想在远程虚拟机上启动浏览器来执行操作。 下载了selenium-server-4.15.0.jar &#xff0c;并在远程机器上启动&#xff0c;CMD里执行java -jar selenium-server-4.15.0.jar …

【游戏开发算法每日一记】使用随机prime算法生成错综复杂效果的迷宫(C#,C++和Unity版)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

Python小白之PyCharm仍然显示“No module named ‘xlwings‘”

Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行&#xff0c;输入python出现>>>的提示格&#xff0c;输入import xlwings 回车&#xff0c;正常报错&#xff1a;No module named xlwings。输入python 回车后&#xff0c;再输入im…

宏观角度认识递归之求根节点到叶节点数字之和

LCR 049. 求根节点到叶节点数字之和 - 力扣&#xff08;LeetCode&#xff09; 理解题意分析子问题&#xff1a;给一个头节点&#xff0c;要返回该头结点左右子树的根结点到叶节点数字和。此处还需注意&#xff1a;在获取根结点到叶节点数字和的时候&#xff0c;要传递一个参数&…

openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据库

文章目录 openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据库121.1 连接密态数据库121.2 调用isValid方法刷新缓存示例121.3 执行密态等值查询相关的创建密钥语句121.4 执行密态等值查询相关的创建加密表的语句121.5 执行加密表的预编译SQL语…

ACM练习——第三天

今天继续练习C和ACM模式 在写题之前先了解一些新的知识 1.#include <algorithm> #include <algorithm> 是 C 标准库中的头文件之一&#xff0c;其中包含了一系列用于处理各种容器&#xff08;如数组、向量、列表等&#xff09;和其他数据结构的算法。这个头文件提供…

【Liunx】DHCP服务

【Liunx】DHCP服务 DHCP概述A.安装dhcpB.查看配置文件C.修改配置文件 DHCP概述 DHCP(Dynamic Host Configuration Protocol)i动态主机配置协议 DHCP是由Internet工作任务小组设计开发的&#xff0c;专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议。 口使用DHCP服务的…

56. 携带矿石资源

你是一名宇航员&#xff0c;即将前往一个遥远的行星。在这个行星上&#xff0c;有许多不同类型的矿石资源&#xff0c;每种矿石都有不同的重要性和价值。你需要选择哪些矿石带回地球&#xff0c;但你的宇航舱有一定的容量限制。 给定一个宇航舱&#xff0c;最大容量为 C。现在…

使用PHP编写采集药品官方数据的程序

目录 一、引言 二、程序设计和实现 1、确定采集目标 2、使用PHP的cURL库进行数据采集 3、解析JSON数据 4、数据处理和存储 5、数据验证和清理 6、数据输出和可视化 7、数据分析和挖掘 三、注意事项 1、合法性原则 2、准确性原则 3、完整性原则 4、隐私保护原则 …

【避雷帖!】安美酷便携屏(安美特)

强烈建议别购买京东安美酷便携屏&#xff0c;太脆弱了&#xff0c;一碰就坏&#xff0c;客服态度不行&#xff0c;容易闪屏等等缺点。而且价格偏贵&#xff0c;淘宝上两百块的屏幕足够用了&#xff0c;没必要花六百多块钱&#xff0c;如果就是买来打游戏的话&#xff0c;也用不…

Adobe 2023 全家桶最终版,一键安装,永久免费,赶紧收藏!(win/mac)

文件名称 Adobe 2023 全家桶最终版 支持系统 windows、mac 获取方式 文章底部 分享形式 百度网盘 小励花了一天的时间给大家整理上传了这份最终版全家桶&#xff0c;全部一键安装即可&#xff0c;无需激活&#xff0c;安装以后即可永久使用&#xff0c;觉得给力的小伙伴…

1688往微信小程序自营商城铺货商品采集API接口

一、背景介绍 随着移动互联网的快速发展&#xff0c;微信小程序作为一种新型的电商形态&#xff0c;正逐渐成为广大商家拓展销售渠道、提升品牌影响力的重要平台。然而&#xff0c;对于许多传统企业而言&#xff0c;如何将商品信息快速、准确地铺货到微信小程序自营商城是一个…

【随手记】MySQL中的DISTINCT关键字

在MySQL中&#xff0c;DISTINCT关键字用于返回查询结果集中不重复的记录。它可以应用于单个列、多个列或整个查询结果集。下面是使用DISTINCT关键字的几种常见用法&#xff1a; 查询单个列的不重复值&#xff1a; SELECT DISTINCT column_name FROM table_name;该语句将返回指定…

VMware 安装CentOS7

一、软件准备 VMware 虚拟机安装 官网下载链接&#xff1a;VMware pro 17 下载链接 下载 VMware Workstation Pro | CN vm安装教学就不在细说&#xff0c;纯傻瓜式安装 Centos 7镜像文件下载 下载地址&#xff1a; Index of /centos/ | 清华大学开源软件镜像站 | Tsinghua O…