PAT 1127 ZigZagging on a Tree[难]
构建二叉树:使用中序和后序遍历序列,通过递归函数确定每个节点的位置,并构建二叉树的结构。 广度优先遍历:记录每个节点的深度和顺序,分层存储节点。 生成zigzag顺序:根据层级的奇偶性,决定输出顺序,奇数层按顺序输出,偶数层反转顺序输出。 读取输入:从标准输入读取节点数、中序和后序遍历序列。 构建二叉树:使用递归函数 广度优先遍历:使用队列进行层次遍历,记录每层的节点顺序。 生成结果:根据层级的奇偶性,生成zigzag顺序,奇数层按顺序,偶数层反转顺序,输出结果。
发布日期:2025-05-01 23:01:19
浏览次数:13
分类:精选文章
本文共 1821 字,大约阅读时间需要 6 分钟。
为了解决这个问题,我们需要根据给定的中序和后序遍历序列,构建二叉树,并按照“zigzag”顺序输出节点的值。zigzag顺序是指从根开始,按层遍历,奇数层从左到右,偶数层从右到左。
方法思路
解决代码
import sysfrom collections import dequen = int(sys.stdin.readline())inorder = list(map(int, sys.stdin.readline().split()))postorder = list(map(int, sys.stdin.readline().split()))tree = {}root_id = 0def build(inL, inR, postL, postR): global root_id if inL > inR: return val = postorder[postR] idx = inL while idx <= inR and inorder[idx] != val: idx += 1 l_size = idx - inL current_id = root_id tree[current_id] = {'left': None, 'right': None, 'value': val} left_id = current_id + 1 build(inL, idx-1, postL, postL + l_size - 1, left_id) right_id = current_id + 2 build(idx + 1, inR, postL + l_size, postR - 1, right_id) root_id += 1build(1, n, 1, n)queue = deque()queue.append((0, 0))layer_nodes = []while queue: node_id, depth = queue.popleft() if len(layer_nodes) <= depth: layer_nodes.append([]) layer_nodes[depth].append(node_id) left = tree.get(node_id, {}).get('left', None) if left is not None: queue.append((left, depth + 1)) right = tree.get(node_id, {}).get('right', None) if right is not None: queue.append((right, depth + 1))result = []for depth in range(len(layer_nodes)): nodes = layer_nodes[depth] if depth % 2 == 0: result.extend([tree[node]['value'] for node in nodes]) else: result.extend([tree[node]['value'] for node in reversed(nodes)])print(' '.join(map(str, result))) 代码解释
build,根据中序和后序遍历确定每个节点的位置,并构建二叉树结构。这个方法确保了我们能够正确构建二叉树,并按照指定的zigzag顺序输出节点值。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2026年06月20日 18时14分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP7中十个需要避免的坑
2023-02-28
php7和PHP5对比的新特性和性能优化
2023-02-28
PHP7安装pdo_mysql扩展
2023-02-28
PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
2023-02-28
php7,从phpExcel升级到PhpSpreadsheet
2023-02-28
PHP8中match新语句的操作方法
2023-02-28
PHP:第一章——PHP中常量和预定义常量
2023-02-28
PHP:第一章——PHP中的位运算
2023-02-28
phpcms
2023-02-28
phpcms 2008 product.php pagesize参数代码注射漏洞
2023-02-28
phpcms V9 自定义添加 全局变量{DIY_PATH}方法
2023-02-28
Redis五种核心数据结构的基本使用与应用场景
2023-02-28
PHPCMS多文件上传和上传数量限制
2023-02-28
phpEnv的PHP集成环境
2023-02-28
PHPExcel一些基本设置总结
2023-02-28
PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
2023-02-28
PHPMailer发送邮件
2023-02-28
phpmailer发送邮件,可以带附件
2023-02-28
phpmyadmin 安装
2023-02-28
phpmyadmin数据库建表及插入
2023-02-28