解决Python3中二叉树前序遍历的迭代问题
作者:amboke 发布时间:2022-04-11 09:05:24
标签:Python,二叉树,遍历
Python3中二叉树前序遍历的迭代解决方案
A Binary Tree
二叉树是分层数据结构,其中每个父节点最多有 2 个子节点。在今天的文章中,我们将讨论一个在大量技术编码面试中出现的重要主题。
问题陈述 : 鉴于 根
二叉树,返回 其节点值的前序遍历 . 提供迭代解决方案而不是递归解决方案。
解决方案:
预购遍历 在二叉树中按以下顺序发生:
先访问根
遍历左子树
遍历右子树
为了用迭代解决方案解决这个问题,我们必须实现 堆 数据结构。这是一种非线性数据结构,其中操作按 LIFO(后进先出)顺序执行。我们回答的方法很简单,如下所示:
我们将初始化两个列表 IE 一个承载输出,另一个充当我们的堆栈数据结构。堆栈将使用二叉树的根值进行初始化。
然后,只要堆栈有值,我们就会在堆栈上执行一个 while 循环。在循环中,依次进行以下操作:
删除(弹出)堆栈中最顶部的值(根节点)并将其附加到输出列表
将弹出值的右孩子压入堆栈
将弹出值的左孩子压入堆栈
返回循环结束时的输出列表
作为这个过程的结果,将首先访问根值,然后访问左子树,最后访问右子树值。
需要注意的是,右孩子首先被推入堆栈,然后是左孩子。这是因为堆栈的 LIFO 特性。这样做将允许我们先访问左孩子,然后再访问右孩子。
说话很便宜,给我看代码:
# 二叉树节点的定义 类树节点:
def __init__(self, val=0, left=None, right=None):
自我.val = val
self.left = 左
self.right = 对 类解决方案:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
输出,节点堆栈 = [],[根]
而节点堆栈:
节点 = nodestack.pop()
if node: # preorder: root -> left -> right
output.append(node.val)
nodestack.append(node.right)
nodestack.append(node.left)
返回输出
如果这篇文章对您有帮助,请随意喜欢并订阅我的时事通讯,以获取更多 Python 中的 DSA 内容。
来源:https://www.cnblogs.com/amboke/p/16660367.html
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- <% set conn=server.createobject("adodb.connect
- ctrl + r => 输入drivers回车 => etc/hosts , 用记事本打开它,在 127.0.0.1 local
- 这篇文章主要介绍了Python OrderedDict的使用案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- MacJi “偷懒”翻译了部分,下午冒着被 BOSS 开除的危险将其补完(原文链接)。使用 line-height 垂直居中line-hei
- 前沿在CV领域,我们需要熟练掌握最基本的知识就是各种卷积神经网络CNN的模型架构,不管我们在图像分类或者分割,目标检测,NLP等,我们都会用
- 一、 [::-1]import numpy as npimport numpy as npx = np.arange(1, 6)print(
- 因此计划先把数据转插入一个临时表,再对临时表的数据进行分析。 问题点是如何动态创建临时表。原先Insus.NET使用下面代码实现: 代码如下
- 各位大家好!很荣幸能在这里和大家聊聊!(*^__^*) 嘻嘻……此处省略488字,切入正题。关于网页设计这个行业,在中国来讲这个行业并不成熟
- 一 什么是XML?python与json数据的交互详情 在这篇文章中我们介绍了json是一种独立于编程语言和平台的数据存储和交换方
- 本文实例讲述了python中sys.argv参数用法。分享给大家供大家参考。具体分析如下:在学python的过程中,一直弄不明白sys.ar
- 最简单的方法:取整后判断是否和原值相等!javascript的取整函数是:parseIntif(parseInt(value)==value
- 本文实例讲述了Python实现查找二叉搜索树第k大的节点功能。分享给大家供大家参考,具体如下:题目描述给定一个二叉搜索树,找出其中第k大的节
- 微软昨天在其2009年专业开发者大会上展示了下一个版本的Internet Explorer浏览器IE9。尽管只是一个早期版本,IE开发团队还
- python中的列表是可以直接进行逆序排列的,但是在 python中,逆序排列也是有一定规则的,一般是按升序排序,也就是从左到右。比如 li
- 表单在提交前我们通常会用客户端JS对其内容进行验证,通常都是写一个函数然后在onsumbit事件中调用,如下:<html><
- 本文介绍了prototype.js常用函数及其使用方法例子说明函数名
- 这篇文章主要介绍了Python如何使用字符打印照片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 1.什么是接口接口就是一种规范与标准,在生活中经常见接口,例如:笔记本电脑的USB接口,可以将任何厂商生产的鼠标与键盘,与电脑进行链接。为什
- 首先,大家先去下载一份dvbbs.php beta1的代码,解压后先抛开php代码,找出你的mysql手册,如果没有手册那么就直接看下面的实
- 本文我们以一个登录例子来说明Flask对 post请求的处理机制。1、创建应用目录,如mkdir examplecd example2、在应