首页 > 其他分享 >二叉树的遍历(深度遍历)

二叉树的遍历(深度遍历)

时间:2025-01-22 21:59:44浏览次数:3  
标签:遍历 TreeNode cur val res right 二叉树 深度 left

二叉树的遍历分为广度遍历和深度遍历。这里我们讲解一下深度遍历的代码如何书写。首先要明确深度遍历有三种遍历次序,分别是:前序遍历(中左右),中序遍历(左中右),后序遍历(左右中)。如何区别这几种遍历方式呢?关键在于单层递归时处理逻辑的位置,比如说先写处理逻辑,再写左递归和右递归,这就属于前序遍历。所谓处理逻辑,就是一些在父节点位置进行的操作。比如这道题的处理逻辑就是访问父节点的数值。又比如这道题:翻转二叉树(力扣226)-CSDN博客- ,这里的“中”就是调用swap函数交换父节点的左3右孩子。另外,递归的代码我们遵循三部曲:一.确定函数参数(参数不一定要一开始全部确定好,可以用到了再加);二.确定终止条件;三.确定单层递归逻辑。代码如下:

/**
 * 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:
   void traversal(TreeNode* cur,vector<int>& res){
    //第二步:确定终止条件
    //深度遍历:直到遇到叶子节点之后的空节点才终止
        if(cur == NULL){
            return;
        }
        //第三步:确定单层递归逻辑
        res.push_back(cur -> val);//处理逻辑
        traversal(cur -> left,res);//左
        traversal(cur -> right,res);//右
}
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> res;
        //第一步:确定参数
         traversal(root,res);
         return res;
    }
};

中序遍历:

/**
 * 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:
void traversal(TreeNode* cur,vector<int>& res){
        if(cur == NULL){
            return;
        }
        traversal(cur -> left,res);
         res.push_back(cur -> val);
        traversal(cur -> right,res);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        traversal(root,res);
        return res;
    }
};

后序遍历:

/**
 * 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:
    void traversal(TreeNode* cur,vector<int>& res){
        if(cur == NULL){
            return;
        }
        traversal(cur -> left,res);
        traversal(cur -> right,res);
        res.push_back(cur -> val);
    }
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> res;
        traversal(root,res);
        return res;
    }
};

标签:遍历,TreeNode,cur,val,res,right,二叉树,深度,left
From: https://blog.csdn.net/yaodec/article/details/145289415

相关文章

  • 二叉树的层次遍历(广度优先)
    所谓层次遍历,就是按层次从左往右遍历二叉树。但是一个节点的左子树和右子树之间是没有直接联系方式的。换句话说,当我们遍历了一个节点的左子树的根节点后,无法直接遍历该节点的右子树的根节点。这里我们可以借助一个数据结构,先按一定顺序将节点存放起来,再从该数据结构取出数据,最......
  • 翻转二叉树(力扣226)
    写这道题之前需要熟悉二叉树的遍历,可以看我的这两篇文章:二叉树的遍历(深度遍历)-CSDN博客,二叉树的层次遍历(广度优先)-CSDN博客所谓翻转二叉树,就是将每一个节点的左孩子和右孩子交换(注意这里指的是指针交换,而不是交换节点的数值)。无非就是在遍历二叉树的基础上调用一下swap......
  • DL00461-深度学习算法变压器红外测温过热缺陷检测
    完整gou买链接:https://item.taobao.com/item.htm?ft=t&id=881079880820本系统以Dji指定型号无人机拍摄的红外图像作为原始输入,基于YOLOv9算法训练红外套管目标检测与分割模型。结合Dji测温SDK,系统实时获取目标区域的最大温度值,从而实现红外套管与接线端区域的最大温度测定。该......
  • 用户案例 | 某商业银行引入白鲸调度系统实现系统升级与业务场景深度支持
    导读某地方性股份制商业银行主要提供个人金融、公司金融、国际金融等方面的业务,承担着大量的金融数据处理与分析任务。这些任务对于确保银行的运营效率、风险管理和客户服务至关重要。过去,该银行一直依赖自建的调度系统来管理和协调这些数据任务,确保数据的准确性和及时性。然而,......
  • 基于YOLOv5、YOLOv8和YOLOv10的机场安检行李检测:深度学习应用与实现
    引言随着全球航空运输业的持续增长,机场的安全性变得越来越重要。机场安检作为航空安全的重要组成部分,主要负责对乘客和行李进行检查,防止危险物品进入机场或飞行器。传统的安检方式多依赖人工检查,效率低下且容易出错。因此,基于深度学习的自动化行李检测系统应运而生,通过计算......
  • 深度学习目标检测使用yolov8训练使用路障类数据集之_道路积水检测数据集并构建一个基
    道路积水检测数据集,23097张,yolo和voc1类,标注数量:0道路积水:133261imagenum:23097积水啦,怎么办构建基于YOLOv8的道路积水检测系统。两种标注方式(YOLO和VOC)。以下是完整的代码实现,包括数据加载、模型训练、评估和推理。1.安装依赖首先,确保您已经安装了所需的库,特......
  • 训练YOLOv8模型_胸部x光片检测数据集 且构建一个基于YOLOv8的胸部X光片检测系统 voc_y
    训练YOLOv8模型_胸部x光片检测数据集且构建一个基于YOLOv8的胸部X光片检测系统voc/yolo文章目录以下文字及代码仅供参考1.安装依赖2.数据准备3.文件内容3.1`datasets/chest_xray_detection/`目录3.2`Config.py`3.3`train.py`3.4`detect_tools.py`3.5`UIProgr......
  • 如何使用深度学习框架目标检测YOLOv8训练骨折检测模型涉及到准备数据集、设置环境、预
    如何使用深度学习框架目标检测YOLOv8训练骨折检测模型涉及到准备数据集、设置环境、预处理数据、定义模型、训练模型、评估模型性能、分析结果和可视化,以及开发用户界面识别骨折X光检测数据集骨折X光检测数据集YOLO20000一套全面的X射线图像,旨在促进使用计算机视觉技......
  • 深度学习目标检测框架训练使用YOLOv8训练钓鱼检测数据集 使用Flask或FastAPI等框架创
    深度学习目标检测框架训练使用YOLOv8训练钓鱼检测数据集并构建一个基于YOLOv8的钓鱼检测系统使用YOLOv8训练钓鱼检测数据集,如何针对钓鱼检测进行调整和实现的详细步骤。1.安装依赖确保安装了必要的库。对于钓鱼检测,所需的库应该与之前提供的相同,但请根据实际情况检查是......
  • 数据结构-二叉树
     树的相关概念:1、节点的度:树中一个节点的孩子个数称为该节点的度,所有节点的度的最大值是树的度2、分支节点:度大于0的节点称为分支节点3、叶子结点:度为0的节点称为叶子结点4、节点的层次(深度):从上往下数,根节点为1层,依次往下加15、树的高度(深度):树中节点的最大层次6、树......