当前位置: 首页 > news >正文

DAY21-二叉树的遍历方式

1.了解了二叉树的基础知识,

再提一嘴:二叉树的定义也要会写:

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

那么我们如何像遍历数组或者链表一样去遍历二叉树呢?

首先,二叉树的遍历方式主要有两种:

①深度优先遍历:什么是深度优先遍历?就是先一直走到最底层,然后遇到叶子节点之后返回(这里面就涉及到递归+迭代和回溯了)   一般我们有三种深度优先遍历:前序遍历(中左右)、中序遍历(左中右)、后序遍历(左右中),当然还有其他叫法,我就按自己的理解来了。

如果使用非递归的方式就要使用栈去模拟,我感觉这个模拟的过程如何转化成代码要好好去理解,4.23号华为机考第二题就是用的这种方式,题目暂时没找到链接,大家有想法可以去看一下。

附一张图

这样应该比较好理解了。

②广度优先遍历:就是一层层的去遍历,这个应该要用队列去模拟。因为队列有先进先出的特点,把每一层的节点加入队列进行遍历。

2.递归遍历

感觉递归还是需要重点去理解一下的,一想就会,一写就废,把思路转化成代码感觉是最难的!菜就多练,说到递归:可以想一下:

①:递归终止的条件是什么?(如果是深度优先遍历的话,是不是遇到叶子节点就返回啊?)

②:递归的传入参数和返回值是什么?(如果是深度优先遍历的话,参数是不是就是节点?然后返回值就是根据你的函数要返回的数据类型)

③:递归的单层逻辑是什么?(个人感觉这个比较难去实现,你要去处理什么?就是怎么样确保每次递归都能干你想干的事情)

知道这三个以后我们开始实现一下递归遍历:

以前序遍历为例:中左右

①:递归的终止条件?if(cur == NULL)  return;  

②:传入的参数?Traversal(TreeNode *root,vector<int> &res)

一个是根节点,一个是需要保存结果的数组

③:单层逻辑?

去保存根节点,然后再去递归左节点和右节点。

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;}
};

好了,中序和后序就先不看了,递归估计手撕也不会考二叉树的,二叉树这地方模拟考的比较多!

http://www.lryc.cn/news/601155.html

相关文章:

  • 数据结构 堆(4)---TOP-K问题
  • Canvas实现微信小程序图片裁剪组件全攻略
  • mmap的调用层级与内核态陷入全过程
  • 六、搭建springCloudAlibaba2021.1版本分布式微服务-admin监控中心
  • 记录一次薛定谔bug
  • 基于LNMP架构的分布式个人博客搭建
  • Java大数据面试实战:Hadoop生态与分布式计算
  • 数据权属雷区:原始数据与衍生数据的法律边界如何划清?
  • AI与区块链Web3技术融合:重塑数字经济的未来格局
  • ROS2入门到精通教程(三)快速体验
  • Linux vimgrep 详解
  • VGG 改进:融合CNN与Transformer的VGG模型
  • vmware虚拟机中显示“网络电缆被拔出“的解决方法
  • 【面板数据】中国A股上市公司制造业智能制造数据集(1992-2024年)
  • 从稀疏数据(CSV)创建非常大的 GeoTIFF(和 WMS)
  • 【温度传感器】热电偶、热敏电阻、热电阻、热成像仪原理及精度解析
  • 立式加工中心X-Y轴传动机械结构设“cad【6张】三维图+设计说明书
  • Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 基于springboot的在线数码商城/在线电子产品商品销售系统的设计与实现
  • 06-ES6
  • Effective C++ 条款04:确定对象被使用前已先被初始化
  • 【C++】定义常量
  • HTTPS的基本理解以及加密流程
  • 基于图神经网络的星间路由与计算卸载强化学习算法设计与实现
  • C++___快速入门(上)
  • 人形机器人_双足行走动力学:弹性势能存储和步态能量回收
  • LeetCode|Day26|191. 位 1 的个数|Python刷题笔记
  • hot100-每日温度
  • MyBatis-Plus 通用 Service
  • 睡眠函数 Sleep() C语言