【刷题】Leetcode 1609.奇偶树

在这里插入图片描述

题目描述

在这里插入图片描述
根据题目信息,我们可以整理出一些基本思路。

  1. 首先我们需要想办法遍历每层数据 其中需要记录二叉树当前深度。
  2. 遍历的过程中进行判断,不符合要求就返回false

基本就需要做到这两大板块就可以完成我们的任务了。重要的是这个过程如何实现:这里我们用到两个常用方法:广度优先搜索 (BFS)和 深度优先搜索(DFS)。下面初步解释一下两种算法:

广度优先搜索(BFS)

广度优先搜索是连通图的一种遍历算法,是很多重要图算法的原型(比如Dijkstra最短路径算法和Prim最小生成树算法)。它是一种盲目搜索法,目的是展开并检查图中的所有节点,进而得到结果。
过程是十分暴力的,不考虑结果的具体位置,直接遍历搜索所有节点,直到找到结果为止。基本过程是从根节点开始,沿着树(图)遍历所有节点,访问完所以节点后算法终止。常使用队列(FIFO)辅助实现BFS算法。

深度优先算法(DFS)

深度优先算法是图论的经典算法,是针对图和树的遍历算法(比如前序遍历,中序遍历,后序遍历)。利用深度优先算法可以产生目标图的对应拓扑排序表,进而方便的解决问题(如最大路径算法)。
其过程简单来说是对一个可能分支进行处理到不能再进行处理为止。如果是死路就返回,返回图中遇见未探索的分支就进行进行处理,直到达到要求。一般使用堆或栈来辅助实现DFS算法。

思路一(BFS)

根据上面的介绍我们可以通过队列来辅助我们进行遍历所有树。
具体分为两个循环嵌套:

  1. 首先外围while 保证访问所有节点,并记录深度。
  2. 内层for循环 负责处理该层所有节点,并将下一层节点存入队列中。

接下来是一些细节:

  1. leve记录层数 (注意从0开始)
  2. prev 记录上一个节点数
  3. value记录当前节点数
  4. prev 处理完每个节点后 需要迭代。
  5. 每层处理结束后 level++
    这两个循环是算法的核心部分, 保证了遍历所有节点.
    来看代码实现(选择使用C++ 比较方便)
class Solution {
   
public:
    bool isEvenOddTree(TreeNode* root) {
   
        //建立队列
        queue<TreeNode*> qu;
        //先入根节点
        qu.push(root);
        //设置层数
        int level = 0;
		//开始遍历 队列全为空就结束
        while(!qu.empty()){
   
        	//prev 为前一个节点值 这里进行初始化
        	//偶数下标 层上的所有节点的值都是 奇整数,从左到右按顺序严格递增
        	//所以 prev设置为最小值
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我龙翔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值