广告
返回顶部
首页 > 资讯 > 数据库 >二叉树的中序遍历
  • 875
分享到

二叉树的中序遍历

python 2023-10-07 12:10:51 875人浏览 安东尼
摘要

解题思路: 官方题解中介绍了三种方法来完成树的中序遍历,包括: 递归 借助栈的迭代方法 莫里斯遍历 在树的深度优先遍历中(包括前序、中序、后序遍历),递归方法最为直观易懂,但考虑到效率,我们通常不推荐使用递归。 栈迭代方法虽然提高了效率,但

解题思路:
官方题解中介绍了三种方法来完成树的中序遍历,包括:

递归
借助栈的迭代方法
莫里斯遍历
在树的深度优先遍历中(包括前序、中序、后序遍历),递归方法最为直观易懂,但考虑到效率,我们通常不推荐使用递归。

栈迭代方法虽然提高了效率,但其嵌套循环却非常烧脑,不易理解,容易造成 “一看就懂,一写就废” 的窘况。而且对于不同的遍历顺序(前序、中序、后序),循环结构差异很大,更增加了记忆负担。

因此,我在这里介绍一种 “颜色标记法” (瞎起的名字……),兼具栈迭代方法的高效,又像递归方法一样简洁易懂,更重要的是,这种方法对于前序、中序、后序遍历,能够写出完全一致的代码。

其核心思想如下:

使用颜色标记节点的状态,新节点为白色,已访问的节点为灰色。
如果遇到的节点为白色,则将其标记为灰色,然后将其右子节点、自身、左子节点依次入栈。
如果遇到的节点为灰色,则将节点的值输出。
使用这种方法实现的中序遍历如下:

作者:henry
链接:https://LeetCode.cn/problems/binary-tree-inorder-traversal/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution:    def inorderTraversal(self, root: TreeNode) -> List[int]:        WHITE, GRAY = 0, 1        res = []        stack = [(WHITE, root)]        while stack:            color, node = stack.pop()            if node is None: continue            if color == WHITE:                stack.append((WHITE, node.right))                stack.append((GRAY, node))                stack.append((WHITE, node.left))            else:                res.append(node.val)        return res作者:henry链接:Https://leetcode.cn/problems/binary-tree-inorder-traversal/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来源地址:https://blog.csdn.net/yyfhq/article/details/133631654

您可能感兴趣的文档:

--结束END--

本文标题: 二叉树的中序遍历

本文链接: https://www.lsjlt.com/news/424478.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 二叉树的中序遍历
    解题思路: 官方题解中介绍了三种方法来完成树的中序遍历,包括: 递归 借助栈的迭代方法 莫里斯遍历 在树的深度优先遍历中(包括前序、中序、后序遍历),递归方法最为直观易懂,但考虑到效率,我们通常不推荐使用递归。 栈迭代方法虽然提高了效率,但...
    99+
    2023-10-07
    python
  • 二叉树遍历方法——前、中、后序遍历(java)
    二叉树结构: static class TreeNode{ public char val; public TreeNode left; public TreeNode right; ...
    99+
    2023-09-20
    算法
  • C语言二叉树层序遍历
    实现下面图中的二叉树层序遍历 #include <stdio.h> #include <stdlib.h> #include <stdbool.h&g...
    99+
    2022-11-13
  • python先序遍历二叉树问题
    问题 如何遍历一个二叉树 遍历二叉树就是访问二叉树的每一个节点 二叉树父结点下先左访问,先序遍历(根左右) 例如:遍历以下的二叉树 遍历结果:ABDECF Python代码示例 # !/usr/bi...
    99+
    2022-06-04
    遍历 二叉树 python
  • JavaScript实现二叉树层序遍历
    目录题目描述示例递归实现代码思路解析图示队列实现代码思路解析题目描述 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例 二叉树:[3...
    99+
    2023-05-14
    JavaScript二叉树遍历 JS遍历 二叉树层序遍历 JS二叉树
  • 怎么解析python二叉树的中序遍历
    今天就跟大家聊聊有关怎么解析python二叉树的中序遍历,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。二叉树的中序遍历题目给定一个二叉树,返回它的 中序 遍历。示例:输入: [1,n...
    99+
    2023-06-19
  • C++ LeeCode二叉树的中序遍历是什么
    这篇文章主要介绍了C++ LeeCode二叉树的中序遍历是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++ LeeCode二叉树的中序遍历是什么文章都会有所收获,下面我们一起来看看吧。一、题目二、代码c...
    99+
    2023-06-19
  • C++实现LeetCode(94.二叉树的中序遍历)
    [LeetCode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历 Given a binary tree, return the ...
    99+
    2022-11-12
  • 用C++实现二叉树层序遍历
    这篇文章主要讲解了“用C++实现二叉树层序遍历”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用C++实现二叉树层序遍历”吧!二叉树层序遍历从底部层序遍历其实还是从顶部开始遍历,只不过最后存储...
    99+
    2023-06-20
  • C语言中二叉树的后序遍历详解
    目录一.二叉树的后序遍历.(递归)二.二叉树的后序遍历(迭代)总结首先我们从两个方面讲解二叉树的后序遍历(递归+迭代) 一.二叉树的后序遍历.(递归) 思想: 首先我们从二叉树的根节...
    99+
    2022-11-13
  • 带你搞懂C++ LeeCode 二叉树的中序遍历
    一、题目 二、代码 class Solution { public: void Middle(TreeNode* root,vector<int>...
    99+
    2022-11-12
  • python中创建和遍历二叉树
    python创建和遍历二叉树,可以使用递归的方式,源代码如下: #!/usr/bin/python class node(): def __init__(self,k=None,l=None,r=None): self.key=...
    99+
    2023-01-31
    建和 遍历 中创
  • Java 二叉树遍历特别篇之Morris遍历
    在前面,我们简单提及过二叉树的遍历方式,有递归和非递归两个版本的遍历。仔细想一想,不管是递归的,还是非递归的遍历,两种版本的遍历都是需要耗费大量的、额外的空间。比如当我们二叉树的高度...
    99+
    2022-11-12
  • C++怎么实现二叉树层序遍历
    本篇内容主要讲解“C++怎么实现二叉树层序遍历”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现二叉树层序遍历”吧!二叉树层序遍历Given a binary tree, return...
    99+
    2023-06-20
  • C++实现LeetCode(102.二叉树层序遍历)
    [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历 Given a binary tree, return the&#...
    99+
    2022-11-12
  • C++二叉树层序遍历实例分析
    今天小编给大家分享一下C++二叉树层序遍历实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。二叉树层序遍历Example...
    99+
    2023-06-19
  • JavaScript如何实现二叉树层序遍历
    今天小编给大家分享一下JavaScript如何实现二叉树层序遍历的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。题目描述给你一...
    99+
    2023-07-05
  • c语言二叉树的前序遍历方法
    这篇文章主要讲解了“c语言二叉树的前序遍历方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言二叉树的前序遍历方法”吧!题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,nu...
    99+
    2023-06-19
  • 怎么解析python二叉树的后序遍历
    怎么解析python二叉树的后序遍历,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。二叉树的后序遍历题目给定一个二叉树,返回它的 后序 遍历。 示例:输入: [1,...
    99+
    2023-06-19
  • C++实现LeetCode(144.二叉树的先序遍历)
    [LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历 Given a binary tree, return the...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作