解决Python3中二叉树前序遍历的迭代问题

 更新时间:2022年09月06日 08:36:23   作者:amboke  
二叉树是分层数据结构,其中每个父节点最多有 2 个子节点,在今天的文章中,我们将讨论一个在大量技术编码面试中出现的重要主题,对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 内容。

到此这篇关于Python3中二叉树前序遍历的迭代解决方案的文章就介绍到这了,更多相关Python二叉树遍历内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python print函数使用由浅入深全面详解

    Python print函数使用由浅入深全面详解

    这篇文章主要为大家介绍了Python print函数使用由浅入深全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Python中的图像处理之Python图像平滑操作

    Python中的图像处理之Python图像平滑操作

    本文主要介绍在Python中调用OpenCV库对图像进行图像平滑滤波处理与图像加噪处理,如双边滤波,高斯双边滤波,图像加随机噪声等操作,对Python图像平滑操作感兴趣的朋友一起看看吧
    2022-06-06
  • Django 实现外键去除自动添加的后缀‘_id’

    Django 实现外键去除自动添加的后缀‘_id’

    今天小编就为大家分享一篇Django 实现外键去除自动添加的后缀‘_id’,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Django中使用Celery的方法示例

    Django中使用Celery的方法示例

    这篇文章主要介绍了Django中使用Celery的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 详细聊一聊为什么Python没有main函数

    详细聊一聊为什么Python没有main函数

    相信很多初学python的人看代码的时候都会先找一下main()方法,从main往下看,但事实上python中是没有你理解中的“main()”方法的,下面这篇文章主要给大家介绍了关于为什么Python没有main函数的相关资料,需要的朋友可以参考下
    2023-03-03
  • Python切片操作去除字符串首尾的空格

    Python切片操作去除字符串首尾的空格

    这篇文章主要介绍了Python切片操作去除字符串首尾的空格 的相关资料,需要的朋友可以参考下
    2019-04-04
  • 利用selenium爬虫抓取数据的基础教程

    利用selenium爬虫抓取数据的基础教程

    这篇文章主要给大家介绍了关于如何利用selenium爬虫抓取数据的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用selenium具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • 彻底理解Python list切片原理

    彻底理解Python list切片原理

    本篇文章主要介绍了Python list切片原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • opencv 阈值分割的具体使用

    opencv 阈值分割的具体使用

    这篇文章主要介绍了opencv 阈值分割的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python机器学习理论与实战(一)K近邻法

    python机器学习理论与实战(一)K近邻法

    这篇文章主要为大家详细介绍了python机器学习理论与实战第一篇,K近邻法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论