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

leetcode二叉树刷题调试不方便的解决办法

1. 二叉树不易构建

在leetcode中刷题时,如果没有会员就需要将代码拷贝到本地的编译器进行调试。但是leetcode中有一类题可谓是毒瘤,那就是二叉树的题。

要调试二叉树有关的题需要根据测试用例给出的前序遍历,自己构建一个二叉树,非常不方便。

作为一个懒人,在此之前我的解决办法就是硬看程序,反复检查,但是确实有点折磨了。

前几天在刷二叉树有关的题时心血来潮写了一个函数来帮助构建二叉树。

2. 代码

#include <iostream>
#include <queue>
using namespace std;
#define null -1

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

TreeNode* construct(vector<int>& nums)
{
    int n = nums.size();
    TreeNode* newnode = nullptr;
    queue<TreeNode*> q;
    if (n != 0)
    {
        int i = 0;
        newnode = new TreeNode(nums[i++]);
        q.push(newnode);
        while (!q.empty())
        {
            if (i < n && nums[i] != null)
            {
                q.front()->left = new TreeNode(nums[i]);
                q.push(q.front()->left);
            }
            i++;
            if (i < n && nums[i] != null)
            {
                q.front()->right = new TreeNode(nums[i]);
                q.push(q.front()->right);
            }
            i++;
            q.pop();
        }
    }
    
    return newnode;
}

leetcode给出的前序遍历中,空结点通常用null来表示,在程序中我们可以用一个数据范围之外的数来表示空结点,并将null定义为这个数。上面的代码中用的是-1。

我们用这个函数来帮助我们调试上面的这道题:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define null -1

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:
    TreeNode* ans;
    int count, ansCount;

    int dfs(TreeNode* root)
    {
        if (root == nullptr) return 0;

        count++;
        int left = dfs(root->left);
        int right = dfs(root->right);
        count--;

        if (left == right && count + left >= ansCount)
        {
            ans = root;
            ansCount = count + left;
        }

        return max(left, right) + 1;
    }

    TreeNode* lcaDeepestLeaves(TreeNode* root) {
        ans = nullptr;
        count = ansCount = 0;
        dfs(root);
        return ans;
    }
};

TreeNode* construct(vector<int>& nums)
{
    int n = nums.size();
    TreeNode* newnode = nullptr;
    queue<TreeNode*> q;
    if (n != 0)
    {
        int i = 0;
        newnode = new TreeNode(nums[i++]);
        q.push(newnode);
        while (!q.empty())
        {
            if (i < n && nums[i] != null)
            {
                q.front()->left = new TreeNode(nums[i]);
                q.push(q.front()->left);
            }
            i++;
            if (i < n && nums[i] != null)
            {
                q.front()->right = new TreeNode(nums[i]);
                q.push(q.front()->right);
            }
            i++;
            q.pop();
        }
    }
    
    return newnode;
}

int main()
{
    vector<int> nums = { 3,5,1,6,2,0,8,null,null,7,4 };
    cout << Solution().lcaDeepestLeaves(construct(nums))->val << endl;
}

这下就方便多了。

如果函数的返回值是 TreeNode* 的话,主函数的写法也可以直接照搬。

http://www.dtcms.com/a/112698.html

相关文章:

  • 【Redis】服务端高并发分布式结构
  • 使用Scrapy官方开发的爬虫部署、运行、管理工具:Scrapyd
  • 网安小白筑基篇五:web后端基础之PHP
  • Springboot----@Role注解的作用
  • C++设计模式-解释器模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 【Python使用】嘿马推荐系统全知识和项目开发教程第2篇:1.4 案例--基于协同过滤的电影推荐,1.5 推荐系统评估【附代码
  • 【Android】界面布局-线性布局LinearLayout-例子
  • 编程能力的跃迁时刻:技术革命与认知重构的交响曲
  • MySQL索引原理:从B+树手绘到EXPLAIN
  • 合肥京东运营服务商TOP5推荐
  • Axure数据可视化科技感大屏设计资料——赋能多领域,展示无限价值
  • C# 类库生成后自动复制到指定目录
  • Mysql 集群架构 vs 主从复制架构
  • PostgreSQL LIKE 操作符详解
  • 如何在windows 环境、且没有显卡的情况下用python跑通从ModelScope下载的大模型的调用
  • FPGA状态机思想实现流水灯及HDLBits学习
  • 02.unity各个面板说明
  • JSON Crack:简化数据可视化的参数编辑器
  • 【Guava】新集合 - BiMapMultimapMultiset
  • JavaScript中左键单击(click)与双击(dblclick)事件的关系解析地图操作避坑
  • vue项目data functions should return an object
  • Linux的 `/proc` 目录 笔记250404
  • 【kubernetes】BusyBox
  • 试用thymeleaf引入vue-element-admin(一)
  • 工业领域网络安全技术发展路径洞察报告发布 | FreeBuf咨询
  • HTTP Content-Type
  • 【CSP】202403-1词频统计
  • Haskell语言的云安全
  • Linux文件处理三剑客详解-grep,sed,awk
  • 如何使用 Puppeteer 解决 reCAPTCHA 并提高成功率