当前位置: 首页 > news >正文

23. 二叉树的高度

23. 二叉树的高度

题目描述
现给定一棵二叉树的先序遍历序列和中序遍历序列,要求你计算该二叉树的高度。

输入描述
输入包含多组测试数据,每组输入首先给出正整数N(<=50),为树中结点总数。下面2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。

输出描述
对于每组输入,输出一个整数,即该二叉树的高度。

输入示例
9
ABDFGHIEC
FDHGIBEAC
7
Abcdefg
gfedcbA
输出示例
5
7

实现代码(Python):

importsysfromcollectionsimportdequeclassTreeNode(object):def__init__(self,val,left=None,right=None):self.val=val self.left=left self.right=rightdefCreateTree(pre_seq,mid_seq):#创建二叉树,二叉树的定义其实就是一个递归定义ifnotpre_seqornotmid_seq:#递归终止条件returnNone#获取根节点元素root_val=pre_seq[0]#创建根节点root=TreeNode(root_val)#找到中序中根节点下标,方便划分左右子树root_idx=mid_seq.index(root_val)#递归创建左子树root.left=CreateTree(pre_seq[1:root_idx+1],mid_seq[:root_idx])#递归创建右子树root.right=CreateTree(pre_seq[root_idx+1:],mid_seq[root_idx+1:])returnrootdefTreeHeight(root):#利用层序遍历求树高ifnotroot:return0queue=deque([root])res=[]whilequeue:level=[]size=len(queue)for_inrange(size):node=queue.popleft()level.append(node.val)ifnode.left:queue.append(node.left)ifnode.right:queue.append(node.right)res.append(level)returnlen(res)defmain():lines=sys.stdin.read().splitlines()count=len(lines)//3idx=0for_inrange(count):n=int(lines[idx])idx+=1pre_seq=lines[idx]idx+=1mid_seq=lines[idx]idx+=1root=CreateTree(pre_seq,mid_seq)height=TreeHeight(root)print(height)if__name__=="__main__":main()

分析

创建二叉树:
1.递归终止条件:先序 / 中序序列为空时,返回None(无节点);
2.根节点确定:先序第一个元素是根节点;
3.划分左右子树:通过中序中根节点的索引,拆分出左 / 右子树的先序、中序序列;
4.递归构建:分别构建左、右子树并挂载到根节点。

求树高可通过层序遍历或前中后序遍历

http://www.cnnetsun.cn/news/1368173.html

相关文章:

  • 5分钟搞定 Stable Diffusion v1.5 Archive 部署:开箱即用,快速体验AI绘画魅力
  • 阿里云跨账号VPC对等连接实战:5分钟搞定ECS私网互通(附路由配置截图)
  • 快速掌握RIP协议配置全流程
  • 5分钟搞定Unity+Visual Studio开发环境配置(含C#游戏开发工作负载)
  • 深求·墨鉴(DeepSeek-OCR-2)效果展示:水墨留痕可视化识别过程
  • 基于LLaVA-v1.6-7b的Agent Skill开发:从入门到实战
  • 告别图片资源:手把手教你用iconfont优化微信小程序性能(2024最新版)
  • Janus-Pro-7B一键部署教程:Ubuntu20.04环境下的快速安装指南
  • OpenSumi AI 原生功能实战:打造智能化开发体验的 7 个关键步骤
  • LLM配置模板管理:解决本地化部署痛点的技术指南
  • Animius视频下载模块详解:M3U8流媒体下载与断点续传实现
  • 收藏!小白程序员必看:ViCToR如何让大模型更好地理解视觉信息
  • LeetCode 热题 100 之 35. 搜索插入位置 74. 搜索二维矩阵 34. 在排序数组中查找元素的第一个和最后一个位置
  • SiamMask核心原理深度解析:孪生网络如何统一跟踪与分割
  • 5分钟搞定!用MediaMTX和FFmpeg搭建RTSP转HLS直播流(含低延迟配置)
  • [技术突破]48Tools直播数据采集系统:从故障修复到架构升级的实践之路
  • **标题:MLOps实战进阶:基于Docker+Kubernetes的
  • ContextCapture Center 在智慧城市建设中的实景三维建模实践
  • 探索Java世界的新表情——emoji-java库
  • 认真写的论文被当AI?百考通:降重+降AI,为原创者正名!
  • 如何使用vscode-markdown-pdf:3分钟快速上手指南
  • 【亲测免费】 推荐一款强大的开源网址导航系统:WebStack-Laravel
  • 从像素到对象:手把手教你理解Cutie的遮蔽注意力机制(附代码解读)
  • 三维重建质量评估:从像素到感知的四大核心指标解析
  • 某盾blackBox逆向避坑指南:如何应对频繁更新的JS混淆策略
  • SQL Server数据库被标记为SUSPECT?5步紧急修复指南(附完整命令)
  • freeRTOS任务通知 vs 队列:ESP32场景下5种通信方式性能实测
  • Deepagents环境价值:构建智能AI代理的完整生态系统指南
  • HalfCheetah-v2 环境下的深度强化学习算法实现分析
  • 保姆级教程:在Ubuntu 22.04上给ROS2 Humble的USB摄像头做内参标定(附结果文件解读)