【数据结构】二叉树--OJ练习题

news2024/10/5 15:37:33

目录

1 单值二叉树

2 相同的树

3 另一颗树的子树

4 二叉树的前序遍历

5 二叉树的最大深度

6 对称二叉树

7 二叉树遍历


1 单值二叉树

965. 单值二叉树 - 力扣(LeetCode)

 

bool isUnivalTree(struct TreeNode* root) {
    if (root == NULL)
    {
        return true;
    }
    if (root->left && root->val != root->left->val)
    {
        return false;
    }

    if (root->right && root->val != root->right->val)
    {
        return false;
    }

    return isUnivalTree(root->left) && isUnivalTree(root->right);

}

2 相同的树

100. 相同的树 - 力扣(LeetCode)

 

/*
* Definition for a binary tree node.
* struct TreeNode {
    *int val;
    *struct TreeNode* left;
    *struct TreeNode* right;
    *
};
*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if (p == NULL && q == NULL)
    {
        return true;
    }

    if (p == NULL || q == NULL)//这里是说只有一个为空 另一个不为空  两个都为空的情况已经被上个判断语句排除了
    {
        return false;
    }

    if (p->val != q->val)
    {
        return false;
    }

    return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);

}

3 另一颗树的子树

572. 另一棵树的子树 - 力扣(LeetCode)

 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

bool  isSametree(struct TreeNode* p, struct TreeNode* q)
{
    if (p == NULL && q == NULL)
    {
        return true;
    }

    if (p == NULL || q == NULL)
    {
        return false;
    }

    if (p->val != q->val)
    {
        return false;
    }

    return isSametree(p->left, q->left) && isSametree(p->right, q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
    if (root == NULL)
    {
        return false;
    }
    if (root->val == subRoot->val)
    {
        if (isSametree(root, subRoot))
        {
            return true;
        }
    }

    return isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot);

}

4 二叉树的前序遍历

144. 二叉树的前序遍历 - 力扣(LeetCode)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 /**
  * Note: The returned array must be malloced, assume caller calls free().
  */


int TreeSize(struct TreeNode* root)
{
    return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}

void PrevOrder(struct TreeNode* root, int* a, int* i)//这里的i 之所以传指针是因为递归的时候要保存上一次i的值 
{
    if (root == NULL)
    {
        return;
    }
    a[*i] = root->val;
    (*i)++;
    PrevOrder(root->left, a, i);
    PrevOrder(root->right, a, i);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    int n = TreeSize(root);
    int* a = (int*)malloc(sizeof(int) * n);
    int j = 0;
    PrevOrder(root, a, &j);//这里j取地址
    *returnSize = n;
    return a;
}

5 二叉树的最大深度

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


int maxDepth(struct TreeNode* root) {
    if (root == NULL)
    {
        return 0;
    }
    int ret1 = maxDepth(root->left);
    int ret2 = maxDepth(root->right);
    return (fmax(ret1, ret2) + 1);

}

6 对称二叉树

101. 对称二叉树 - 力扣(LeetCode)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
    if (p == NULL && q == NULL)
    {
        return true;
    }

    if (p == NULL || q == NULL)
    {
        return false;
    }

    if (p->val != q->val)
    {
        return false;
    }

    return isSameTree(p->left, q->right) && isSameTree(p->right, q->left);
}
bool isSymmetric(struct TreeNode* root) {
    if (root == NULL)
    {
        return NULL;
    }

    return isSameTree(root->left, root->right);
}

7 二叉树遍历

二叉树遍历_牛客题霸_牛客网

 

#include <stdio.h>
#include<stdlib.h>
typedef struct BianryTreeNode
{
    struct BianryTreeNode* left;
    struct BianryTreeNode* right;
    char val;
}BTNode;

BTNode* CreatTree(char* a, int* i)//前序遍历
{
    if (a[*i] == '#')
    {
        (*i)++;
        return  NULL;
    }

    BTNode* root = (BTNode*)malloc(sizeof(BTNode));
    root->val = a[*i];
    (*i)++;
    root->left = CreatTree(a, i);
    root->right = CreatTree(a, i);
    return root;
}

void PrintInOrder(BTNode* root)//中序遍历
{
    if (root == NULL)
    {
        return;
    }
    PrintInOrder(root->left);
    printf("%c ", root->val);
    PrintInOrder(root->right);
}
int main() {
    char arr[100];
    scanf("%s", arr);
    int i = 0;
    BTNode* root = CreatTree(arr, &i);
    PrintInOrder(root);
    return 0;
}

本节对二叉树的一些常规OJ题目进行了代码实现和讲解, 虽然图解很少, 但是大家根据代码和注释也可以很好理解,也可以自己画一画递归展开图.本节对二叉树链式结构的基础要求很高, 大家如果基础不好,可以先看看我之前的博客.

继续加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

屏幕亮度调节保护您的眼睛

官方下载地址&#xff1a; 安果移动 视频演示&#xff1a;屏幕亮度调节-保护您的眼睛_哔哩哔哩_bilibili 嗨&#xff0c;亲爱的用户&#xff0c;你是否有过这样的体验&#xff1a;夜晚安静的时刻&#xff0c;想要在抖音上看看热门的舞蹈、在快手上发现生活的 趣味、或是在哔…

[MoeCTF 2023] web题解

文章目录 webhttpcookie彼岸的flagmoe图床大海捞针夺命十三枪 web http 连接到本地后&#xff0c;题目给了我们任务 第一个是要求我们GET传参UwUu第二个是要求我们POST传参Luvu第三个是要求我们cookie值为admin第四个是要求我们来自127.0.0.1第五个是要求我们用MoeBrowser浏…

Spring framework Day14:配置类的Lite模式和Full模式

前言 Lite模式和Full模式是指在软件或系统中的不同配置选项。一般来说&#xff0c;Lite模式是指较为简洁、轻量级的配置&#xff0c;而Full模式则是指更加完整、功能更丰富的配置。 Lite模式通常会去除一些不常用或占用资源较多的功能&#xff0c;以提高系统的运行效率和响应…

【C++】 对象模型与内存模型的区别

目录 0 引言1 C 内存模型2 C 对象模型3 二者区别 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;C专栏&#x1f4a5; 标题&#xff1a;【C】 对象模型与内存模型的区别❣️ 寄语&#xff1a;最重要的只有一件事&#xff01;&#x1f388; 最后&am…

Spring(17) AopContext.currentProxy() 类内方法调用切入

目录 一、简介二、代码示例2.1 接口类2.2 接口实现类2.3 AOP切面类2.4 启动类&#xff08;测试&#xff09;2.5 执行结果 一、简介 背景&#xff1a; 在之前 Spring 的 AOP 用法中&#xff0c;只有代理的类才会被切入。例如&#xff1a;我们在 Controller 层调用 Service 的方式…

nginx的优化和防盗链(重点)

一、nginx的优化&#xff08;重点&#xff09; &#xff08;一&#xff09;隐藏版本号 由于nginxbug多&#xff0c;更新版本速度比较快&#xff0c;一旦版本号暴露出去&#xff0c;有可能给对方提供攻击的漏洞 1、在http大模块中修改 2、修改nginx.h源码包 &#xff08;二&a…

竞赛 深度学习LSTM新冠数据预测

文章目录 0 前言1 课题简介2 预测算法2.1 Logistic回归模型2.2 基于动力学SEIR模型改进的SEITR模型2.3 LSTM神经网络模型 3 预测效果3.1 Logistic回归模型3.2 SEITR模型3.3 LSTM神经网络模型 4 结论5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 …

leetcode:1929. 数组串联(python3解法)

难度&#xff1a;简单 给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans &#xff0c;数组下标 从 0 开始计数 &#xff0c;对于所有 0 < i < n 的 i &#xff0c;满足下述所有要求&#xff1a; ans[i] nums[i]ans[i n] nums[i] 具体而言&am…

基于Java的二手车交易管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

基于深度学习网络的疲劳驾驶检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1疲劳检测理论概述 4.2 本课题说明 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 In_layer_Size [227 227 3]; img_size [224,…

BSPHP 未授权访问 信息泄露

漏洞描述 BSPHP 存在未授权访问 泄露用户 IP 和 账户名信息 漏洞复现 访问url&#xff1a; 构造payload访问&#xff1a; /admin/index.php?madmin&clog&atable_json&jsonget&soso_ok1&tuser_login_log&page1&limit10&bsphptime16004073…

【牛客网刷题(数据结构)】:环形链表的约瑟夫问题

描述 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数&#xff0c;报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后&#xff0c;只剩下一个人&#xff0c;问最后留下的这个人编号是多少&#xff1f; O(n) 示例1 好环形链表的约瑟夫问题是一个经典的问…

cmd/bat 批处理文件的参数/接收命令行参数

前言 略 接收命令行参数 变量 %1~%9 对应命令行参数 1-9变量%0表示自身如果参数超过9个&#xff0c;则需要shift命令 示例 将下面的内容保存为bat文件&#xff08;比如1.bat&#xff09;&#xff1a; echo off echo.%%0为自身 echo.第0个参数是:%0 echo.第1个参数是:%1 e…

ROS 学习 Gazebo仿真

机器人模型添加Gazebo属性 使用xacro设计的机器人URDF模型已经描述了机器人的外观特征和物理特性&#xff0c;虽然已经具备在Gazebo中仿真的基本条件&#xff0c;但是&#xff0c;由于没有在模型中加入Gazebo的相关属性&#xff0c;还是无法让模型在Gazebo仿真环境中动起来。那…

基于Java的大学生兼职论坛管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

基于STM32_DHT11单总线温湿度传感器驱动

基于STM32_DHT11单总线温湿度传感器驱动 文章目录 基于STM32_DHT11单总线温湿度传感器驱动前言一、DHT11&#xff1f;二、原理1.时序1.主机复位信号和 DHT11 响应信号2.信号‘0’的表示3.信号‘1’的表示4.整个数据信号收发流程 2.数据结构 三、驱动1 .h文件&#xff1a;2 .c文…

力扣-434.字符串中的单词数

Idea 利用C中的 stringstream 指定字符分割字符串 class Solution { public:int countSegments(string s) {int cnt 0;stringstream ss(s);string word;while(ss >> word){cnt;}return cnt;} };

大模型分布式训练并行技术(一)-概述

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&am…

【Java 进阶篇】JavaScript流程控制语句详解

JavaScript是一门高级编程语言&#xff0c;具备丰富的流程控制语句&#xff0c;用于控制程序的执行流程。在本篇博客中&#xff0c;我们将深入探讨JavaScript的流程控制语句&#xff0c;包括条件语句、循环语句、以及其他一些控制语句。这篇博客将逐步介绍这些概念&#xff0c;…

智慧公厕:打破传统,解决城市痛点@中期科技

近年来&#xff0c;随着城市化进程的加速推进&#xff0c;智慧公厕成为人民生活质量提升的重要组成部分。作为一个富有创新和科技感的解决方案&#xff0c;智慧公厕不仅满足了人们对公共环境的要求&#xff0c;还提供了一系列便利的服务&#xff0c;让人们的生活更加舒适、便捷…