前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >二叉树的中序遍历

二叉树的中序遍历

作者头像
大忽悠爱学习
发布于 2021-11-15 02:14:54
发布于 2021-11-15 02:14:54
16700
代码可运行
举报
文章被收录于专栏:c++与qt学习c++与qt学习
运行总次数:0
代码可运行

解法1:递归解法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) 
    {
        vector<int> ret;
        display(root, ret);
        return ret;
    }
    //递归写法
    void display(TreeNode* root,vector<int>& ret)
    {
        if (root == NULL)
            return;
        display(root->left, ret);
        ret.push_back(root->val);
        display(root->right, ret);
    }
};

解法2:颜色标记法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root)
    {
        stack<pair<TreeNode*, string>> st;
        vector<int> ret;
        if (root == NULL)
            return ret;
        st.push({ root,"white" });
       //或者这样写: st.push((make_pair(root, "white")));
        while (!st.empty())
        {
            pair < TreeNode*, string > p= st.top();
            st.pop();
            if (p.first == NULL)
                continue;
            if (p.second == "white")
            {
                p.second = "grey";
                st.push({ p.first->right,"white" });
                st.push(p);
                st.push({ p.first->left,"white" });
            }
            else
                ret.push_back(p.first->val);
        }
        return ret;
    }
};

每一次有新节点入栈,都会设置他的颜色为白色,目的是为了在该节点下次出栈的时候,查看其左右孩子是否存在,存在的话压入栈中,再设置为灰色,下一次出栈就直接输出

官方栈解法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        stack<TreeNode*> stk;
        while (root != nullptr || !stk.empty()) {
            while (root != nullptr) {
                stk.push(root);
                root = root->left;
            }
            root = stk.top();
            stk.pop();
            res.push_back(root->val);
            root = root->right;
        }
        return res;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++树详解
树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:①有且仅有一个特定的称为根(Root)的结点;②当n>1时,其余结点可分为m(m>0)个互不相交的有限集T 1 {T}_{1}T 1 ​ 、T 2 {T}_{2}T 2 ​ 、… 、T m {T}_{m}T m ​ ,其中每一个集合本身又是一棵树,并且称为根的子树(Sub Tree)。
Twcat_tree
2023/10/16
4420
C++树详解
【数据结构】二叉树
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
羚羊角
2025/02/11
800
【数据结构】二叉树
二叉树与堆
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点,称为根结点,根节点没有前驱结点 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继
绝活蛋炒饭
2024/12/16
970
二叉树与堆
【数据结构与算法】详解二叉树下:实践篇————通过链式结构深入理解并实现二叉树
在计算机科学中,二叉树是一种重要的数据结构,它以其独特的结构和性质在数据存储、搜索和算法设计中发挥着重要作用。链式结构作为二叉树的一种常见表示方式,通过节点间的指针连接,实现了对二叉树的高效存储和访问。
倔强的石头
2024/12/06
1900
【数据结构与算法】详解二叉树下:实践篇————通过链式结构深入理解并实现二叉树
听说你还不了解二叉树?赶紧进来轻松解决
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。简言之,二叉树是数据结构中非常重要的东西,在很多OJ试题和笔试题中,都会出现它的影子;至于高阶数据结构中的各种树,比如二叉搜索树、AVL树、红黑树、B树等都是基于二叉树的高阶树。总之,现在把普通二叉树学好了,对以后的学习是十分有帮助的。
北 海
2023/07/01
1610
听说你还不了解二叉树?赶紧进来轻松解决
二叉树
二叉树 定义 二叉树是每个节点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。 基本术语 度:节点所拥有子节点的个数 叶子节点:度为0的节
爱撒谎的男孩
2018/07/04
4650
【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)
在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,且为了方便后面的介绍,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。 基于二叉树的链式结构,于是可以先malloc动态开辟出二叉树的每个节点并初始化,然后通过节点中的指针struct BinaryTreeNode* left(指向左树)和struct BinaryTreeNode* right(指向右树),将各个节点连接起来,最后大致模拟出了一棵二叉树,代码如下:
用户11029269
2024/03/19
840
【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)
二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解
本文持续更新地址:https://haoqchen.site/2018/05/23/go-through-binary-tree/
全栈程序员站长
2022/07/01
2.5K0
二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解
七十六、 数据结构二叉树及其代码实现
树是一种非常重要的非线性结构,本身具有递归的性质(在其后的编程中体现的淋漓尽致)。
润森
2022/08/17
4240
七十六、 数据结构二叉树及其代码实现
二叉树的四种遍历算法
二叉树在作为一种重要的数据结构,它的很多算法的思想在很多地方都用到了,比如说大名鼎鼎的 STL 算法模板,里面的优先队列(priority_queue)、集合(set、map)等等都用到了二叉树里面的思想,如果有兴趣的小伙伴可以去查找一些这些方面的资料。但是我们现在先不讨论那么高深的数据结构,我们先从二叉树的遍历开始:
指点
2019/01/18
3.5K0
二叉树的四种遍历算法
【Java】二叉树:数据海洋中灯塔式结构探秘(上)
二叉树中有一个树,我们可以猜到他和树有关,那我们先了解一下什么是树,在来了解一下二叉树
喜欢做梦
2024/11/25
960
【Java】二叉树:数据海洋中灯塔式结构探秘(上)
一文带你搞懂二叉树
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分。
用户11029129
2024/06/04
1360
一文带你搞懂二叉树
二叉树、堆的结构与相关问题
        树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。         有一个特殊的结点,称为根结点,根节点没有前驱结点 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继         因此,树是递归定义的。
比特大冒险
2023/04/16
4230
二叉树、堆的结构与相关问题
【C语言视角】数据结构之~二叉树
前言:总所周知~数据结构的二叉树对于初学者来说是一个十分难理解的知识点。接下来,请阅读本人对二叉树拙劣的理解~
小文要打代码
2024/10/16
730
【C语言视角】数据结构之~二叉树
数据结构 之 二叉树
< 2 > 或者是由一个根节点加上最多两棵分别称为左子树和右子树的二叉树组成。(左右子树可为空)
AUGENSTERN_
2024/04/09
1070
数据结构 之 二叉树
数据结构——二叉树
树是一种非线性的数据结构,它是由n个有限节点组成的具有层次关系的集合。每一个节点代表一个元素,由父节点和子节点的层次关系连接。它被叫做树的原因是因为看起来像一颗倒挂的树(根朝上,叶子朝下)。
HZzzzzLu
2024/11/26
1160
数据结构——二叉树
数据结构-5.二叉树
本篇博客给大家带来的是二叉树的知识点, 其中包括面试经常会提问的真题 ArrayList 和 LinkedList 的区别 .
用户11369350
2024/11/19
940
数据结构-5.二叉树
二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
我们首先定义一个结构来存放二叉树的节点 结构体里分别存放左子节点和右子节点以及节点存放的数据
ahao
2024/03/19
960
二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
二叉树的遍历
在计算机中,遍历本身是一个线性操作。所以遍历同样具有线性结构的数组或链表,是一件轻而易举的事情。
T1Am0
2022/09/13
3630
【二叉树 OJ题】二叉树基础知识 与 OJ题完成(二叉树构建与遍历问题,子树查找问题)
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。
叫我龙翔
2024/01/30
1520
【二叉树 OJ题】二叉树基础知识 与 OJ题完成(二叉树构建与遍历问题,子树查找问题)
推荐阅读
相关推荐
C++树详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验