首页 > 其他分享 >LeeCode-94. 二叉树的中序遍历

LeeCode-94. 二叉树的中序遍历

时间:2024-09-04 22:04:11浏览次数:3  
标签:遍历 temp 中序 LeeCode 二叉树 root 节点 result

基本概念

  • 二叉树

BinaryTree

二叉树的结构如上图所示,由一系列左-中-右节点组成的树状数据结构,其基本结构如下所示,由一个中间节点向左右分叉成两个节点,故称二叉树。

BasicStrcture

  • 中序遍历

看二叉树基本的结构左-中-右三个节点,中间为Root,左边为Left,右边为Right。按顺序排列的话有C(3,2)=6种,其中左右,右左算法类似。以中间Root为参考,固定左-右,则排序 左-中-右 为中序遍历,中-左-右 为先序遍历,左-右-中 为后序遍历

解题思路

题目要求中序遍历,即对于所有的节点,都是左-中-右的顺序遍历所有节点,考虑到二叉树结构本身的特殊性,采用指针依次访问,比较难以遍历全局。考虑到整棵树本身可以看作一个基本节点,每个节点本身又是一个基本节点,如下图所示,类似想到递归调用。先写出基本结构的调用顺序,再依次对各子节点做递归调用。

BasicStrcture

实现代码

vector<int> inorderTraversal(TreeNode* root) {
    vector<int> result;
    if (root)
    {
        if (root->left)
        {
            auto temp = inorderTraversal(root->left);
            result.insert(result.end(), temp.begin(), temp.end());
        }

        result.push_back(root->val);

        if (root->right)
        {
            auto temp = inorderTraversal(root->right);
            result.insert(result.end(), temp.begin(), temp.end());
        }

    }
    return result;
}

标签:遍历,temp,中序,LeeCode,二叉树,root,节点,result
From: https://www.cnblogs.com/stephen2023/p/18397395

相关文章

  • LeeCode打卡第十七天
    LeeCode打卡第十七天第一题:合并两个有序链表(LeeCode第21题):将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。主要思想:将两个链表从头开始比较,将两个链表中的较小值存入新链表中,比较到最后,有一个链表会先为空,此时需要......
  • LeeCode打卡第十八天
    LeeCode打卡第十八天第一题:两两交换链表中的节点(LeeCode第24题):给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。主要思想:将两个链表从头开始比较,将两个链表中的较小值存入新链表中,比较......
  • C++ 数据结构——二叉树(最最最最最实用的二叉树教程)
    本文章以实用为主,所以不多废话直接开整本文所介绍的二叉树是最基础的二叉树,不是二叉搜索树,也不是平衡二叉树,就基本的二叉树若需要Python版,请跳转到 Python数据结构——二叉树(最最最最最实用的二叉树教程)二叉树的构建二叉树为一个父节点连接到两个子节点,若还要加入新的......
  • 力扣-968监控二叉树(Java贪心详细题解)
    题目链接:968.监控二叉树-力扣(LeetCode)前情提要:本题是一道名副其实的hard题目,他考察二叉树和贪心的综合运用能力。所以我们不仅要会贪心还要会二叉树的一些知识,如果没有写二叉树类型的题目,建议大家该题可以放放,去刷其他的题目。因为本人最近都来刷贪心类的题目所以该......
  • 推断二叉树(递推)
    已知前序中序求后序#include<cstring>#include<cstdio>#include<iostream>usingnamespacestd;voidbinary_tree(stringmid,stringpre){ if(mid.size()>0){ charch=pre[0]; intcur=mid.find(ch); binary_tree(mid.substr(0,cur),pre......
  • Day14|第六章 二叉树 part02| 226.翻转二叉树| 101. 对称二叉树| 104.二叉树的最大深
    226.翻转二叉树(递归只能前序或者后序,中序不行)classSolution{publicTreeNodeinvertTree(TreeNoderoot){if(root==null)returnnull;swap(root);invertTree(root.left);invertTree(root.right);//swap(root);......
  • 算法与数据结构——二叉树数组表示
    二叉树数组表示在链表表示下,二叉树的存储单元为节点TreeNode,节点之间通过指针相连接。同前面的队列或栈,二叉树同样可以使用数组来表示。表示完美二叉树给定一棵完美二叉树,我们将所有节点按照层序遍历的顺序存储在一个数组中,则每个节点都对应唯一的数组索引。按照层序遍历的特......
  • Java二叉树的遍历以及最大深度问题
    Java学习+面试指南:https://javaxiaobear.cn1、树的相关概念1、树的基本定义树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为......
  • 算法与数据结构——二叉树
    二叉树二叉树(binarytree)是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。structTreeNode{ intval; //节点值 TreeNode*left; //左子结点指......
  • Java 实现二叉树展平为链表
    Java实现二叉树展平为链表前言问题背景解决方案代码实现代码分析结论使用原地算法(O(1)空间复杂度)将二叉树展平为链表问题描述解决方案代码实现代码分析优化思路结论前言在处理二叉树数据结构时,有时需要将其转换成一种特殊的形态,即链表。这种转换可以简化某些......