二叉树的遍历递归与迭代实现

二叉树层序遍历分层[递归迭代两种思想+三种解法] 层序遍历作为二叉树遍历的基本遍历,一般来说只能用迭代来解。但是分层输出则既可用迭代,又可配合level用前序遍历来解。 阅读详情

二叉树的遍历

二叉树主要有两种遍历方式:

深度优先遍历:先往深走,遇到叶子节点再往回走。
广度优先遍历:一层一层的去遍历。

那么从深度优先遍历和广度优先遍历进一步拓展,才有如下遍历方式:

深度优先遍历
前序遍历(递归法,迭代法)
中序遍历(递归法,迭代法)
后序遍历(递归法,迭代法)

广度优先遍历
层次遍历(迭代法)

经常会使用递归的方式来实现深度优先遍历,也就是实现前中后序遍历;
迭代:前中后序遍历的逻辑其实都是可以借助栈使用非递归的方式来实现的。

广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树

1. 二叉树的定义

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

2. 二叉树遍历的递归实现

递归算法的三要素:

1、「确定递归函数的参数和返回值:」确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

2、「确定终止条件:」写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

3、「确定单层递归的逻辑:」确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

2.1 前序遍历

class Solution {
public:
    void traversal(TreeNode* cur, vector<int>& vec) {
        if (cur == NULL) return;
        vec.push_back(cur->val);    // 中
        traversal(cur->left, vec);  // 左
        traversal(cur->right, vec); // 右
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> result;
        traversal(root, result);
        return result;
    }
};

2.2 中序遍历

void traversal(TreeNode* cur, vector<int>& vec) {
        if (cur == NULL) return;
        traversal(cur->left, vec);  // 左
        vec.push_back(cur->val);    // 中
        traversal(cur->right, vec); // 右
    }

2.3 后序遍历

  void traversal(TreeNode* cur, vector<int>& vec) {
        if (cur == NULL) return;
        traversal(cur->left, vec);  // 左
        traversal(cur->right, vec); // 右
        vec.push_back(cur->val);    // 中
    }

3.二叉树遍历的迭代实现

3.1 前序遍历

在这里插入图片描述

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int>res;
        //特例
        if(root==nullptr) return res;
        stack<TreeNode*>sta;
        sta.push(root);
        while(!sta.empty()){
            TreeNode *cur=sta.top();
            sta.pop();
            res.push_back(cur->val);//中
            //因为栈是先进后出,所以先将右子树压入栈中;
            if(cur->right) sta.push(cur-> right);
            if(cur->left) sta.push(cur->left);
        }
        return res;
    }
};

3.2 中序遍历

刚在迭代的过程中,其实我们有两个操作:

1、处理:将元素放进result数组中
2、访问:遍历节点

分析一下为什么刚刚写的前序遍历的代码,不能和中序遍历通用呢,因为前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,因为要访问的元素和要处理的元素顺序是一致的,都是中间节点

中序遍历,中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了处理顺序和访问顺序是不一致的。

在使用迭代法写中序遍历,就需要借用指针的遍历来帮助访问节点,栈则用来处理节点上的元素

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int>res;
        if(root==nullptr) return res;
        stack<TreeNode*> sta;
        TreeNode *cur=root;
        while(cur!=nullptr || !sta.empty() ){
            if(cur!=nullptr){ //指针用来访问结点,访问到最低层
                sta.push(cur);  //将访问的节点放进栈
                cur=cur->left;  //左
            }else{
                cur=sta.top();  //从栈里弹出数据,放进res中
                sta.pop();
                res.push_back(cur->val); //中
                cur=cur->right;  //右
                //这里不能写为if(cur->right) cur=cur->right; 因为当前节点可能存在左子树
            }
        }
        return res;
    }
};

3.3 后序遍历

前序遍历为中左右,中序遍历为左中右,后序遍历为左右中

后序遍历为左右中,先序遍历为中左右,需要调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转result数组,输出的结果顺序就是左右中了

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int>res;
        if(root==nullptr) return res;
        stack<TreeNode *>sta;
        sta.push(root);
        while(!sta.empty()){
            TreeNode *cur=sta.top();
            sta.pop();
            if(cur==nullptr)  continue;
            res.push_back(cur->val);
            sta.push(cur->left);//对比于前序遍历,更改一下的入栈顺序
            sta.push(cur->right);
        }
        reverse(res.begin(),res.end()); //将结果反转之后变为左中右的顺序。
        return res;
        
    }
};

4.二叉树的层序遍历

leetcode 102、107、199、635、429、515都可以用层序遍历解决

解题思路:层次遍历

  1. 初始化:一个队列queue<TreeNode*> q, 将root节点入队列q
  2. 如果队列不空,做如下操作:
  3. 弹出队列头,保存为node,将node的左右非空孩子加入队列
  4. 做2,3步骤,直到队列为空

如果不需要确定当前遍历到了哪一层,模板如下:

void bfs() {
    vis[] = 0;//标记数组
    queue<int> pq(start_val);

    while (!pq.empty()) {
        int cur = pq.front(); 
        pq.pop();
        for (遍历cur所有的相邻节点nex) {
            if (nex节点有效 && vis[nex]==0){
                vis[nex] = 1;//节点以访问
                pq.push(nex)
            }
        }
    }
}

如果需要确定遍历到哪一层,模板如下:

void bfs() {
    int level = 0;//表示遍历的层数
    vis[] = 0; // or set
    queue<int> pq(original_val);
    while (!pq.empty()) {
    //这里一定要使用固定大小size,定义一个变量,不要使用que.size(),因为que.size是不断变化的
        int sz = pq.size();//记录每一层的元数个数
        while (sz--) {
                int cur = pq.front(); pq.pop();
            for (遍历cur所有的相邻节点nex) {
                if (nex节点有效 && vis[nex] == 0) {
                    vis[nex] = 1;
                    pq.push(nex)
                }
            } // end for
        } // end inner while
        level++;

    } // end outer while
}

lc 102 二叉树的层序遍历

在这里插入图片描述

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        queue<TreeNode *>que;
        vector<vector<int>>res;
        if(root==NULL) return res;
        que.push(root);
        while(!que.empty()){
 // 这里一定要使用固定大小size,定义一个变量,不要使用que.size(),因为que.size是不断变化的
            int sz=que.size();
            vector<int>ans;
            while(sz--){
                TreeNode *cur=que.front();
                que.pop();
                ans.push_back(cur->val);
                if(cur->left) que.push(cur->left);
                if(cur->right) que.push(cur->right);
            }
            res.push_back(ans);
        }
        return res;
    }
};

lc 637.二叉树的层平均值

在这里插入图片描述

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<double> averageOfLevels(TreeNode* root) {
        vector<double>res;
        if(root==NULL) return res;
        queue<TreeNode *>que;
        que.push(root);
        while(!que.empty()){
            int sz=que.size();
            double sum=0;
            int tmp=sz;
            while(sz--){
                TreeNode *cur=que.front();
                que.pop();
                sum+=cur->val;
                if(cur->left) que.push(cur->left);
                if(cur->right) que.push(cur->right);
            }
            res.push_back(sum/tmp);
        }
        return res;
    }
};

lc 429.N叉树的层序遍历

在这里插入图片描述

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        vector<vector<int>>res;
        if(root==NULL) return res;
        queue<Node *>que;
        que.push(root);
        while(!que.empty()){
            vector<int>ans;
            int sz=que.size();
            while(sz--){
                Node *cur=que.front();
                que.pop();
                ans.push_back(cur->val);
                //记录每层孩子的个数
                int cur_size=cur->children.size();
                //循环遍历孩子,将孩子加入队列中
                for(int i=0;i<cur_size;i++){
                   if(cur->children[i])  que.push(cur->children[i]);
                }
                
            }
            res.push_back(ans);
        }
        return res;

        
    }
};

lc 515.在每个树行中找到最大值

在这里插入图片描述

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> largestValues(TreeNode* root) {
        vector<int>ans;
        if(root==nullptr) return ans;
        queue<TreeNode *>que;
        que.push(root);
        while(!que.empty()){
            int sz=que.size();
            //注意测试用例中有负数,初始化为最小值
            int tmp=INT_MIN,max_val=INT_MIN;
            while(sz--){
                TreeNode *cur=que.front();
                que.pop();
                tmp=cur->val;
                max_val=max(tmp,max_val);
                if(cur->left) que.push(cur->left);
                if(cur->right) que.push(cur->right);
            }
            ans.push_back(max_val);
        }
        return ans;
    }
};
二叉树的先序遍历、中序遍历、后序遍历、层次遍历的迭代实现以及递归实现 同时发布:https://notes.daiyuhe.com/traversal-of-binary-tree/ 遍历二叉树的迭代实现 先序遍历:根-左-右 实现思路:使用栈。由于栈是后进先出,所以push的顺序为右-左。 首先入栈root node = 出栈,记录当前值 入栈node.right 入栈node.left 重复2-4,直到栈空 public List<Integer&gt... 阅读详情

相关推荐

【LeetCode Python实现】二叉树的前序遍历,中序遍历,后序遍历递归和迭代的两种实现方式

想要看更加舒服的排版、更加准时的推送 关注公众号“不太灵光的程序员” 不定期 有干货推送,微信随时解答你的疑问 😃 😃 😃 文章目录二叉树类型的题目是LeetCode中常见的题型递归实现迭代实现先序遍历中序遍历后序遍历 二叉树类型的题目是LeetCode中常见的题型 能够结合队列、栈、链表、字符串等多种数据结构; 需要掌握树、图的遍历方式; 需要掌握递归函数的使用,并自己设计提柜过程; 实际工程中也会经常遇到。 树的常见遍历有先序遍历、中序遍历、后序遍历三种: 先序遍历:根、左、右 中序遍历:左、.

1369

剑指offer-22 -- 从上往下打印二叉树 - C++

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 方法:层次遍历 这道题就是一个模板题,对队列的使用。因为要满足先进先出的特性。 初始化:一个队列queue<TreeNode*> q, 将root节点入队列q 如果队列不空,做如下操作: 弹出队列头,保存为node,将node的左右非空孩子加入队列 做2,3步骤,直到队列为空 如果不需要确定当前遍历到了哪一层,模板如下: void bfs() { vis[] = 0; queue<int&g

小白_努力 369

关于小样本学习综述论文的总结

对小样本学习综述的个人总结

qq_46176086的博客 5456

二叉树的递归与迭代

二叉树的递归、迭代

Hanknet的博客 137

openEuler在虚拟机的网络配置

ethernet0.virtualDev 可以配置成其他类型的虚拟网络适配器。常见的选项包括:vlance - 用于模拟 AMD PCnet32 LANCE 网络适配器,支持10Mbps。e1000 - 用于模拟 Intel E1000 千兆网络适配器,支持1Gbps。e1000e - 用于模拟更现代的 Intel E1000e 千兆网络适配器。vmxnet - 用于 VMware 的自定义网络适配器,性能更好但需要安装 VMware Tools。

FHY1221的博客 2931

Multisim14.3中FPGA接口电路设计:原理图项目应用

深入讲解在multisim14.3环境下构建FPGA接口电路的方法,结合原理图设计与项目实践,展现multisim14.3强大的电路仿真能力,提升数字系统开发效率。

weixin_42578963的博客 1157

二叉树的层序遍历(递归和迭代法)

二叉树的层序遍历(递归和迭代法)

weixin_44640001的博客 1220

LTspice基础教程-009.LTspice波形测量

<<==上一篇:LTspice基础教程-008.LTspice PWL设置 >>==下一篇:LTspice基础教程-010. 首篇博客文末提供所有相关资源百度网盘分享链接

gaoyong_wang的博客 4万+

树(Tree)——(二)链式存储

用代码实现前序、中序、后序,第一种方法就是使用递归,另一种是使用栈。将分别讲述。 目录 1. 递归实现 main函数(C语言版本) 2. 利用栈实现 mystack.h mystack.cpp main函数 3.补充:求树高度的函数     1. 递归实现 main函数(C语言版本) #include &lt;stdio.h&gt; #if 0  //如下图示意图的树...

chenchen_fcj程序猿的博客 528

SQL注入:联合查询的三个绕过技巧

在SQL注入中,可以利用科学计数法来绕过对输入的限制。例如,可以使用科学计数法来绕过对字符串长度的限制,通过将字符串拆分成多个部分并使用科学计数法来表示。此外,还可以利用数据库的特定特性或语法来替代原始的查询语句,从而执行联合查询或其他恶意操作。另外,还可以尝试利用无列名注入的技巧,通过在原始查询中使用通配符或其他方式来绕过对列名的限制,从而执行恶意操作。

qq_68163788的博客 3792

【博客汇总】UV打印机博客汇总

UV平板机博客汇总

Print World的专栏 1737

用java实现二叉树的后序遍历(递归和迭代)

用java实现二叉树的后序遍历(递归和迭代两种方法),有详细注释以及图解

m0_57248752的博客 2220

【同等学力】2005-数学⭐✨

有r个正方形排成一行,今用红、黄、白、蓝四种颜色给这个r个正方形染色,每个正方形只能染一种颜色,如果要求染红、黄、白色的正方形分别至少出现一个,问有多少种不同的染法?3、(4分)设G是一个有n个结点m条边的连通简单平面图,若n≥3,则m≤3n-6.4、(4分)证明:任何连通简单平面图至少有一个结点的度数不超过5

super_mochi1 305

非递归迭代实现二叉树遍历

前序遍历;中序遍历;后序遍历;求两个数组的交集

m0_73372323的博客 834

【YOLO26创新改进】TGRS 2026 | Transformer变体改进篇 | 使用CGTA曲率引导令牌注意力,改善结构与纹理的整体协调,适合遥感小目标检测、旋转目标检测、实例分割任务

本文在YOLO26目标检测模型中引入CGTA曲率引导令牌注意力模块,依据曲率显著性与特征可靠性,从高分辨率特征图中筛选少量关键令牌,再让全部位置与这些代表性特征进行全局交互,从而以较低计算和显存开销建立远距离目标、背景及跨尺度结构之间的联系;该模块能够重点强化车辆、舰船、飞机、建筑等目标的边缘、转角和弯曲轮廓,改善小目标、密集目标及旋转目标的特征完整性与定位稳定性,并通过可靠性门控抑制噪声和伪边缘,通过标准注意力与曲率注意力融合避免平坦区域被过度增强。

AI魔改博士-中大博士 46

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

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

Js实现二叉树的递归遍历和迭代遍历

目录 一、前序遍历 (1)递归实现 (2)迭代实现 二、中序遍历 (1)递归实现 (2) 迭代实现 三、后序遍历 (1)递归实现 (2)迭代实现 一、前序遍历 对应144.二叉树的前序遍历 (1)递归实现 首先我们需要了解什么是二叉树的前序遍历:按照访问根节点——左子树——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。 /** * Defin..

果冻 1503

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

二叉树 先根遍历 中跟遍历 后跟遍历 迭代+递归实现代码

二叉树 先根遍历 中跟遍历 后跟遍历 结构体: struct Node{ int val; Node *LC; Node *RC; Node(int k){ this->val=k; LC=NULL; RC=NULL; } }; 函数: void preOrder(Node *root){//先根遍历就是DFS呀 递归实现 if(root==NULL){ re...

qq_38241346的博客 1219

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

细谈二叉树前序遍历,中序遍历,后序遍历的迭代与递归实现

文章目录二叉树的三种遍历方式前序遍历递归迭代中序遍历递归迭代后序遍历递归迭代法 二叉树的三种遍历方式 二叉树的三种遍历方式,不同之处在于对根节点访问顺序的先后所导致的。 前序遍历: 根 左 右 中序遍历: 左 根 右 后序遍历: 左 右 根 下面对三种遍历分别进行递归与非递归实现。重点对迭代法进行讲解。 前序遍历 递归 递归法较为简单, 通过先访问根节点,然后将左右节点分别当作根节点重新访问,结束条件是节点为空。 /** * Definition for a binary tree node. *

ifwecande的博客 1535

手把手教数据结构与算法:简单二叉树(递归和迭代实现三种遍历)

该文章深入探讨了二叉树的基础概念、形态、特殊情况、基本操作、性质和存储方式。从树的基本术语开始,解释了二叉树的定义,包括节点、根、子树等概念。接着介绍二叉树的基本形态。并且描述了二叉树的基本操作,如创建、插入、删除、查找和遍历。然后,总结了二叉树的基本性质,包括各层节点数量、满二叉树深度和叶节点与中间节点的关系。介绍了二叉树的存储方式,包括顺序存储和链接存储。最后用递归和迭代的方法完成了前序、中序和后序遍历二叉树

weixin_73611714的博客 2170

二叉树的递归遍历和迭代遍历实现

Java中实现二叉树的递归和迭代遍历二叉树递归遍历前序遍历,中序遍历,后序遍历迭代遍历前序遍历,中序遍历,后序遍历层序遍历(使用队列)平衡二叉树完全二叉树 二叉树 所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题(比如:打印节点内容、节点内容加1)。 遍历是二叉树上最重要的操作之一,是二叉树上进 行其它运算之基础。 在遍历二叉树时,如果没有进行某种约定,每个人都按照自己的方式遍历,得出的结果就比较混乱,如果按照某种规则进行

qq_41603622的博客 1262

二叉树三种遍历的递归和迭代实现

本文所有代码都在leetcode上提交成功,所以输入输出的格式与leetcode上题目一致,下面分析三种遍历使用到的二叉树如下图所示: 中序遍历 该二叉树的中序遍历为{4,2,5,1,6,3}。 递归实现 分析上面中序遍历后的序列,可以发现上面的中序遍历序列可以划分为{{4,2,5},1,{6,3}},可以看出中序遍历的结果可以按如下方法生成: 1.中序遍历左子树 2.输出根节点的值 3.中序遍历右子树 因此,中序遍历的递归代码如下: //leetcode的接口函数 vector<int&g

码上得道的博客 348

(五)二叉树的广度优先遍历的递归实现与迭代实现

(五)二叉树的广度优先遍历(层序遍历)的迭代实现

chumingqian的博客 2648

从递归到迭代:二叉树遍历的两种实现方式对比

本文对比了二叉树遍历的递归与迭代实现方式,详细解析了前序、中序和后序遍历的核心技巧与转换原理。通过代码示例和性能分析,帮助开发者理解在不同场景下选择最优遍历策略,提升算法效率与内存管理能力。

weixin_29214335的博客 283

数据结构与算法 - 二叉树遍历:前中后序的递归与迭代实现

🌿 二叉树遍历:递归与迭代实现 摘要:本文系统讲解了二叉树前序、中序和后序遍历的递归与迭代实现方法。通过清晰Java代码示例和Mermaid图表,展示了不同遍历方式的核心思想和实现技巧。前序遍历采用"根-左-右"顺序,中序遍历为"左-根-右",后序遍历则是"左-右-根"。递归实现直观简洁,而迭代实现则借助栈数据结构模拟递归过程。重点分析了中序遍历迭代实现中的指针移动和栈操作逻辑,帮助读者深入理解遍历本质。无论算法初学者还是进阶开发者,都能从中获得

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

二叉树的三种遍历方式的递归实现和迭代实现

数据与算法的课程中,给出了二叉树三种遍历方式的实现代码但是没有给出其递归实现。本文给出迭代实现。

李意文的博客 2083

用java实现二叉树的前序遍历(递归和迭代)

二叉树的递归遍历和迭代遍历

m0_57248752的博客 798
上一篇: 常见七大排序算法c++代码实现
下一篇: 2020/12/16 leetcode刷题
helloppc90
博客等级 码龄9年 99粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值