二叉树的循环遍历和递归遍历(经典)

二叉树的非递归遍历层次遍历详解 二叉树递归遍历递归的后序遍历二叉树 //非递归的后续遍历二叉树 void HXprint(Tree *tree){ Stack s = initStack(); //初始化一个下面使用的 treeNode *p = tree; //新建一个遍历指针 treeNode *r=NULL; //辅助变量 cout<<"-------"<<endl; while(p||!isEmpty(s)){ //当遍历变量同时为空时 表示遍历完成 阅读详情

备注:以下代码均采用c++实现。

在这里插入图片描述

递归遍历

前序遍历:根、左、右

    // 前序遍历:根、左、右
    void beforeOrder(TreeNode* root, vector<int>& before){
   
   
        // 终止条件
        if(root == NULL){
   
   
            return;
        }
        // 放入当前节点
        before.push_back(root->val);
        // 放入左子节点
        beforeOrder(root->left, before);
        // 放入右子节点
        beforeOrder(root->right, before);
    }

中序遍历:左、跟、右

	// 中序遍历:左、根、右
    void middleOrder(TreeNode* root, vector<int>& middle){
   
   
        // 终止条件
        if(root == NULL){
   
   
            return;
        }
        // 放入左子节点
        middleOrder(root->left, middle);
        // 放入当前节点
        middle.push_back(root->val);
        // 放入右子节点
        middleOrder(root->right, middle);
    }

后序遍历:左、右、跟

 	// 后序遍历:左、右、根
    void afterOrder(TreeNode* root, vector<int>& after){
   
   
        // 终止条件
        if(root == NULL){
   
   
            return;
        }</
二叉树递归与非递归遍历 二叉树遍历 常见的二叉树遍历有三种方式:先序遍历(根结点,左子,右子) 中序遍历(左子,根结点,右子)    后续遍历(左子,右子,根结点) 这三种方式有分别可以用递归递归来实现 先序遍历的主要步骤:(参考下图) 1.从根结点开始先压左路结点,并访问结点,直到把根结点左路结点全部压入。 2.若左子为空,说明左路根结点已经全部压并且已经访问过了,开始取顶元素来访问上一层父节点的右子。把 右子看成子问题继续进行1步骤。 3.依次进行上述12 阅读详情

相关推荐

二叉树遍历(七种方法)

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

AIGC 1万+

如何用循环遍历结构

前言:作为前端,经常遇见要处理形结构的数据(比如菜单、形结构的人员组织),之前常规的操作就是使用递归遍历,但最近发现递归容易出现溢出,所以开始思考有没有其他方式来实现遍历,既能提高性能又能避免溢出。 1、首先写个方法生成一个简单的结构 function createTree(deep){ var children={}; var tree={id:0,children}; for(var i=1;i<=deep;i++){ children.id=i; children.

sinat_34626741的博客 5548

循环遍历二叉树

运用c++控制台应用程序实现对二叉树循环遍历

数据结构算法 递归/循环遍历二叉树

二叉树是一种常见的数据结构,其特点是每一个节点元素都最多包含两个子节点,左子节点右子节点。 二叉树可以有5种基本形态,空二叉树、只有根节点、右子为空,左子为空,左、右子均非空。 二叉树有着广泛的应用,如描述语法结构,表示数据库对象的层次关系。 递归遍历的缺点是如果二叉树的节点较多,系统性能会收到很大影响。 利用循环遍历二叉树,需要设计的结构,用于存储遍历的节点,利用结构的后进先出的特点,遍历所有节点。主要思路是首先根据根节点遍历其下左节点,直至左子节点为空。

学以致用 知行合一 942

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

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

终生学习践行者 1万+

二叉树的五种遍历方式

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

weixin_47382783的博客 1万+

二叉树递归

二叉树递归结构,用递归方法来访问是最自然的。下面摘录课本二叉树中序遍历代码,这是最简单大家最熟悉不过的东西了: #include <stdio.h> #define visit(tree) printf("%d ", tree->x) struct node { int x; struct tree *left; struct tree *right; }; void inorder(struct node *tree) { if(tree->left) inor

aaasssdddd96的博客 557

浅谈递归

在做leetcode的时候,遇到了二叉树遍历,用过许多方法之后,最终着手于利用递归方法来遍历二叉树递归算法在实现上相较于其他的算法来得更为简单,但是递归对时间空间的占用其实是比较高的,所以当选择递归的时候,我们应该考虑是否有更加便捷的非递归方法。那么什么情况下我们可以有效的使用递归呢,递归循环又有什么关系呢,接下来我将会结合自身经历粗浅的谈谈递归。使用递归的条件:用一种通俗不完全的说法来讲...

qq_40907034的博客 210

LeetCode 94. 二叉树的中序遍历(中序遍历

文章目录1. 题目信息2. 解题2.1 递归2.2 循环,必须掌握 1. 题目信息 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/probl...

Michael是个半路程序员 1186

[ZZ]如何用实现递归与非递归的转换

<br /><br />原文链接:http://null.bokee.com/209747.html<br />()三种遍历的算法<br />     递归与非递归转换的基础知识是能够正确理解三种遍历方法:前序,中序后序,第一篇就是关于这三种遍历方法的递归递归算法。<br />一.为什么要学习递归与非递归的转换的实现方法?<br />     1)并不是每一门语言都支持递归的.<br />     2)有助于理解递归的本质.<br />     3)有助于理解,数据结构.<br />二.

砚的专栏 849

用Python重写PTA数据结构经典算法:顺序/循环队列/二叉树遍历全实现

本文通过Python重写PTA数据结构经典算法,包括顺序循环队列、二叉树遍历等,展示了从C语言指针思维到Python对象思维的转变。文章详细对比了两种语言在内存管理、边界检查索引简化等方面的差异,帮助开发者更高效地掌握数据结构在Python中的实现。

weixin_29306571的博客 364

二叉树的非递归遍历

二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为的定义本身就是递归定义,因此采用递归的方法去实现的三种遍历不仅容易理解而且代码很简洁。而对于遍历若采用非递归的方法,就要采用去模拟实现。在三种遍历中,前序中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。 ​ 三种遍历方式访问节点的顺序是一致的,不同之处在于,有的遍历流程把访问到的节点暂存起来,达成某种条件后再将节点输出。

qq_43169752的博客 1万+

详解二叉树递归遍历与非递归遍历——(二)

递归遍历    上一边文章中,咱们谈到了二叉树递归遍历,也是十分的简单哈,这回又继续将非递归遍历写一下。从前序开始扯吧,哈哈!!! 先给出存储结构: typedef struct Node{       int data; //保存节点中的值     ...

一扣解千愁的博客 3609

二叉树前序遍历递归与非递归算法

前几天参加了阿里暑期实习的内推面试,发现自己的数据结构算法基础特别薄弱,比如其中一个问题是中序遍历递归与非递归算法,我平时看数据结构只知道递归算法,非递归的算法直接被问懵逼了,在思考了几十秒之后想出了用数组存放每次遍历节点的父节点,然后用for循环遍历,虽然可以实现,但是我觉得面试官听到之后估计在吐血,还有HashMap底层自己明明知道用的是散列表,在紧张之下我竟然说是数组,面完之后被舍友吐槽,

Tseng 1万+

二叉树遍历递归递归

了解二叉树遍历的方法以及实现,其中包括递归算法递归

chenjia0512的博客 2168

数据结构遍历二叉树递归递归遍历的先序、中序后序遍历、层次遍历法)

二叉树 递归递归遍历的先序、中序后序遍历、层次遍历

ChenZHIHAO_y的博客 1950

二叉树的非递归遍历递归遍历

文章目录前言前序遍历递归递归中序遍历递归递归后序遍历递归递归层序遍历 前言 二叉树遍历有前序遍历、中序遍历、后续遍历、层序遍历。然后我们分别实现一下各种遍历递归与非递归的方式,节点定义如下: class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(...

acehcl 1372

二叉树三种遍历方式的递归循环实现

转载自:http://blog.csdn.net/pi9nc/article/details/13008511 二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用来模拟实现(递归也是用

Lieacui的专栏 1万+
上一篇: obs源码 windows编译
下一篇: springboot 按月分表的优雅实现方式
终成一个大象
博客等级 码龄12年 1万+粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值