二叉树的常用遍历方法

二叉树的遍历 先序遍历:1.访问根结点      2.先序遍历根结点的左子树      3.先序遍历根结点的右子树 中序遍历:1.中序遍历根结点的左子树   2.访问根结点     3.中序遍历根结点的右子树 后序遍历:  1.后序遍历根结点的左子树   2.后序遍历根结点的右子树   3.访问根结点  二叉树的顺序存储结构:             二叉树的顺序存储结构是用一组连续的存储单元存 阅读详情

在二叉树的模块中,最常用的遍历方法就是前序、中序、后序遍历,且经常结合递归的方法对树进行操作

前序遍历:按照访问根节点——左子树——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。

中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。

后序遍历:按照访问左子树——右子树——根节点的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。

给你二叉树的根节点 root ,返回它节点值的 前序 ,中序,后序遍历

前序遍历:递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
void preorder(struct TreeNode*root,int *res,int *resSize)
{
    if(root==NULL)
    return;
    res[(*resSize)++]=root->val;
    preorder(root->left,res,resSize);
    preorder(root->right,res,resSize);
}

int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    int* res=malloc(sizeof(int)*2000);
    *returnSize=0;
    preorder(root,res,returnSize);
    return res;
}

中序遍历:递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
void inorder(struct TreeNode* root, int* res, int* resSize) {
    if (!root) {
        return;
    }
    inorder(root->left, res, resSize);
    res[(*resSize)++] = root->val;
    inorder(root->right, res, resSize);
}

int* inorderTraversal(struct TreeNode* root, int* returnSize) {
    int* res = malloc(sizeof(int) * 501);
    *returnSize = 0;
    inorder(root, res, returnSize);
    return res;
}

 除了递归还可以用一个栈去维护 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
    *returnSize = 0;
    int* res = malloc(sizeof(int) * 501);
    struct TreeNode** stk = malloc(sizeof(struct TreeNode*) * 501);
    int top = 0;
    while (root != NULL || top > 0) {
        while (root != NULL) {
            stk[top++] = root;
            root = root->left;
        }
        root = stk[--top];
        res[(*returnSize)++] = root->val;
        root = root->right;
    }
    return res;
}

后序遍历:递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
void postorder(struct TreeNode* root, int* res, int* resSize)
{
    if (root == NULL)
        return;
    
    postorder(root->left, res, resSize);
    postorder(root->right, res, resSize);
   res[(*resSize)++] = root->val;
    
}

int* postorderTraversal(struct TreeNode* root, int* returnSize) {
    int* res = malloc(sizeof(int) * 2000);
    *returnSize = 0;
    postorder(root, res, returnSize);
    return res;
}

 

树的遍历除了使用递归的方法,通常的还有迭代和Morris遍历,详细的请看另一篇文章。

二叉树的遍历(七种方法) 本章主要通过运用递归与非递归方法分别对二叉树进行遍历 主要分先序遍历、中序遍历、后序遍历以及层次遍历四种情况进行讨论 阅读详情

相关推荐

保姆级教程:用MS建完分子模型,如何一键转成LAMMPS能用的data文件?

本文详细介绍了如何将Materials Studio(MS)构建的分子模型转换为LAMMPS可用的data文件的全流程。重点讲解了力场选择、环境配置、转换命令参数解析及常见问题排查,帮助初学者快速掌握MS与LAMMPS之间的数据转换技巧,特别适合计算材料学领域的研究人员。

weixin_42665255的博客 471

数据结构|二叉树的三种遍历方式,你掌握了几种?

本期讲解二叉树的三种遍历方式:前序遍历、中序遍历、后序遍历的详细讲解,图文并茂通俗易懂。

我的主页 1万+

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计

本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。

weixin_29227585的博客 522

二叉树的五种遍历方式

目录 1、前序遍历 (1)递归实现前序遍历 (2)非递归实现前序遍历 2、中序遍历 (1)递归实现中序遍历 (2)非递归实现中序遍历 3、后序遍历 (1)递归实现后序遍历 (2)非递归实现后序遍历 4、层序遍历 二叉树是一种重要的数据结构,其遍历方式分为:深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即就是层次遍历。如下图: class TreeNode{ int val; TreeNode left; TreeNode ..

weixin_47382783的博客 1万+

Codesys软运动控制进阶:用SMC_FreeEncoder为ECAT轴搭建一个“虚拟手轮”调试工具

本文详细介绍了如何利用Codesys的SMC_FreeEncoder功能为ECAT轴搭建虚拟手轮调试工具,解决自动化设备开发中的硬件依赖问题。通过软件模拟手轮脉冲信号,实现无硬件依赖的运动控制逻辑验证,显著提升调试效率。适用于汇川AM400等PLC平台,特别适合机械安装滞后或伺服驱动器故障时的调试场景。

weixin_33737774的博客 480

复现Fastjson反序列化漏洞(从dnslog回显到rce再到反弹shell)

Fastjson是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。它还可以用于将JSON字符串转换为等效的Java对象,fastjson爆出多个反序列化远程命令执行漏洞,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。......

记录并分享学习安全的知识点.. 2697

二叉树的四种遍历方式

中序遍历 二叉树的中序遍历就是首先遍历左子树,然后访问当前节点,最后遍历右子树。对于下面的二叉树,中序遍历结果如下: 直观来看,二叉树的中序遍历就是将节点投影到一条水平的坐标上。如图: 二叉树结构 struct treenode { int val; treenode *left; treenode *right; treenode() : val(0), left(nullptr), right(nullptr) {} treenode(in

weixin_42127177的博客 9779

机器学习(十九):梯度提升回归(GBR)

机器学习中的梯度提升回归算法原理与案例实战。

全栈川川 5157

数据结构—二叉树的4种遍历方式详解以及Java代码的完整演示

本文介绍了4种二叉树的遍历方法,分别是前序、中序、后续、层序遍历,并且每种方法均提供了详尽的Java语言的代码演示,在最后还介绍了遍历结果推导的方法。

终生学习践行者 1万+

【人工智能】提示词工程:让大模型精准响应的核心技术,提示词的基础框架 以及 常见提示词框架及场景

编写提示词的基础原则包括:简单、明确、详细,提示词拥有零样本提示、少样本提示、分配角色、提示写作风格、限定输出格式等技巧。

奶爸的编程之路,也就一周冷个三天 1138

[SystemC]SystemC中的模块和程序

SystemC 中的层次结构是使用类 sc_module 创建的。sc_module 可以直接使用,也可以使用宏 SC_MODULE “隐藏”。上面的示例 SC_MODULE 创建了一个名为 nand2 的 sc_module 类对象。它的输出纯粹是输入值的函数。因此,模型可以使用最简单的 SystemC 进程,即 SC_METHOD。摘要:本节包含一个完整的简单设计,用于演示 SystemC 中模块和流程的使用。同样,重要的是要注意这不是典型的设计风格 - 但它很好而且易于理解。为什么要看模块和流程?

元直的博客 1869

二叉树遍历的常用方法

概述 二叉树的遍历可以说是解决二叉树问题的基础。我们常用的遍历方式无外乎就四种前序遍历、中序遍历、后续遍历、层次遍历这四种。其中前三种遍历方式在实现时,即便采用不同的实现方式(递归方式、非递归),它们的算法结构是有很大的相似性。因而针对前三种的遍历我们会总结出对应通用的解决框架,便于在解决二叉树问题时进行使用。 递归方式 递归方式遍历二叉树时,无论是前序遍历、中序遍历还是后续遍历的方式,它们最大...

Startapi的博客 338

Xilinx/AMD公司7系列FPGA的ISERDESE2仿真的”天坑”(附verilog的源码vivado仿真工程)

研究LVDS输出接口的ADC与7系列(ZYNQ)FPGA对接过程中,在Vivado中搭建了ISERDESE2的仿真工程,仿真结果ISERDESE2的并行输出口一直输出X或Z,这个坑之大,耗费了我数天的时间,可以称为“天坑”了。同步复位的要求肯定是高于异步复位的,古话说得好“两害相权取其轻”,所以,跟古话对着干就对了!就当RST是同步复位吧,最后经过反复验证,发现。开始怀疑复位信号是否高电平持续时间不够长?但是没有查到复位时间的要求 : - (

FPGA艺术家的博客 171

二叉树的遍历和构建

给定两种遍历顺序,构建一个二叉树,前提是。二叉树常用遍历方式有三种。

2301_77668644的博客 190

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

二叉树遍历问题

二叉树的遍历 一、遍历方法 三种遍历方法,很好记,什么时候访问根节点就叫什么方法。如:先序遍历,肯定就是先访问根节点;中序遍历,就是中间访问根节点;后序遍历就是最后访问根节点。 1、先序遍历:首先访问根节点,然后先序遍历左子树,最后先序遍历右子树 2、中序遍历:首先中序遍历左子树,然后访问根节点,最后中序遍历右子树 3、后序遍历:首先后序...

weixin_34277853的博客 150

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

二叉树遍历的几种常见方法

https://blog.youkuaiyun.com/xxxxxxxx00772299/article/details/109318495/ 二叉树的遍历方法 一.二叉树分类: 完全二叉树 满二叉树 扩充二叉树 平衡二叉树 二.二叉树的四种遍历方式: 前序遍历(先根,再左,最后右) 中序遍历(先左,再根,最后右) 后序遍历(先左,再右,最后根) 层次遍历(说不清) 1.递归遍历 (1)前序遍历 遍历方法:先根节点,再左节点,最后右节点。 实现代码: /*声明结点TreeNode

yygr的博客 2214

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

遍历二叉树

遍历二叉树二叉树是由3个基本单元组成的:根结点、左子树和右子树。 若限定先左后右的顺序,则遍历二叉树只有三种情况分别称为先(根)序遍历、中(根)序遍历和后(根)序遍历。 先序遍历二叉树的操作定义为: 若二叉树为空,则空操作;否则 访问根结点; 先序遍历左子树; 先序遍历右子树。 中序遍历二叉树的操作定义为: 若二叉树为空,则空操作;否则 中序遍历左子树; 访问根结点; 中序遍历右子树。 后

Mazhitaoooo 584

二叉树的创建及遍历方法

在这里我们发现,我们每次存储时,基本上都是按照从上到下,从左到右的方式进行存储的,所以,我们此处存储数据时,可以先把根节点下面的左子树先存放完成,再存放右子树即可实现数据存储,并且,我们存放玩上一个数据之后的每一个节点都可以看做是一个根节点。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左孩子树和右孩子树组成的非空树;按照一般的存储逻辑,我们一般存储都是按照如下编号逐个存储,但是这样的存储方式不太适用于我们的链式存储,因此,这里我们需要使用到递归存储。......

m0_45901455的博客 4万+

图解二叉树及二叉树遍历

二叉树及二叉树遍历 完全二叉树 二叉树的遍历 遍历的性质 1、完全二叉树 对于一棵具有n个节点的二叉树(按层序编号),如果编号为i的节点与同样深度的满二叉树中编号为i的节点在二叉树的位置完全相同,则为完全二叉树。 换句话来说,如果每个节点按照满二叉树的结构逐层顺序进行编号,如果编号出现编号空挡,就说明不是完全二叉树,否则就是。如下图所示:左边二叉树按照完全二叉树进行编号,出现了10号的空挡,右边

xiaotan2011929的博客 2万+

二叉树的中序遍历(三种方法)

本文详细介绍了二叉树的三种遍历方法(递归,迭代,Morris),每一种遍历方式都有保姆级的思路讲解,还有完整代码(带有注释),还不赶紧点进来学习!!!

yourgrandfather_的博客 5184

二叉树的遍历及根据遍历反推树的方法详解

二叉树的遍历及根据遍历构建二叉树的方法 详解 一、前导-关于树的定义 森林(forest):每个连通分量(连通块)都是树的图。按照定义,一棵树也是森林。 生成树(spanning tree):一个连通无向图的生成子图,同时要求是树。也即在图的边集中选择 n−1n - 1n−1 条,将所有顶点连通。 结点的深度(depth):到根结点的路径上的边数。 树的高度(height):所有结点的深度的最大值。 无根树的叶结点(leaf node):度数不超过 111 的结点。 有根树的叶结点(

HeartFireY的博客 4880

二叉树三种遍历方式的六种实现方法

一、基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^(n-1)个元素。 2、深度为h的二叉树至多有2^h-1个结点。 3、对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。 满二叉树:所有终端都在同一层次,且非终端结点的度数为2。

算法改变人生 2万+

二叉树的遍历(递归遍历方法)

二叉树的遍历(递归遍历方法) 对于一个二叉树,有三种遍历方式: 1.先序遍历:先访问父节点,再依次访问左节点、右节点。 2.中序遍历:先访问左节点,再依次访问父节点、右节点。 3.后序遍历:先访问左节点,再依次访问右节点、父节点。 接下来我们通过例子来更好的理解这三种二叉树的遍历方式: 第一种方式 对于先序遍历:从根节点出发,对于2、3节点来说,1是其父节点,所以先访问1,再访问左节点2,同理,对于4,、5节点来说,2是父节点,所以再访问左节点4,访问顺序依次为:1 2 4 8 9 5 10 11 3 6

weixin_45127861的博客 5642

【LeetCode算法修炼+动画演示】【二叉树的遍历】——X.遍历二叉树的方法合集、Morris遍历、94. 二叉树的中序遍历、144. 二叉树的前序遍历、145. 二叉树的后序遍历

X.遍历二叉树的方法合集 前中后序遍历的递归实现 代码片段 public static void preOrderRecur(TreeNode head) { if (head == null) { return; } System.out.print(head.value + " "); preOrderRecur(head.left); ...

内脏裂了 5323

二叉树的遍历方法

我们都知道二叉树可以按照头结点的输出顺序分为:前序遍历、中序遍历和后序遍历。今天我们就来一起探讨一下二叉树这三种遍历方法分辨用算法如何实现?Leetcode144(前序遍历)、94(中序遍历)、145(后序遍历)。

weixin_56089174的博客 934
上一篇: 找零钱问题
下一篇: 判断相同的树
予安灵
博客等级 码龄3年 921粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值