二叉树OJ(C)

文章目录

  • 1.单值二叉树
    • 1.1法一:无返回值
    • 1.2法二:有返回值
  • 2.相同的树
  • 3.对称二叉树
  • 4.二叉树的前序遍历
  • 5.二叉树的中序遍历
  • 6.二叉树的后序遍历
  • 7.另一棵树的子树
  • 8.二叉树遍历

1.单值二叉树

在这里插入图片描述

1.1法一:无返回值

struct TreeNode 
{int val;struct TreeNode *left;struct TreeNode *right;};bool flag = true;
void PreOrderCompare(struct TreeNode* root, int val)
{//递归过程中 遇NULL 或flag已变假 返回上一层if (root == NULL || flag == false)return;//遇非单值 更新flag 返回上一层if (root->val != val){flag = false;return;}//结点数据相等 继续遍历PreOrderCompare(root->left, val);PreOrderCompare(root->right, val);
}bool isUnivalTree(struct TreeNode* root)
{if (root == NULL)return true;else{//OJ题目会用程序测试多组样例//若上个样例flag变为false 这里就会出错//同时也提醒我们要慎用全局变量flag = true;PreOrderCompare(root, root->val);return flag;}
}

1.2法二:有返回值

根与左子树、右子树比较 不断递归

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

2.相同的树

在这里插入图片描述

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.对称二叉树

在这里插入图片描述

struct TreeNode 
{int val;struct TreeNode *left;struct TreeNode *right;};bool isSymmetricSubTree(struct TreeNode* root1, struct TreeNode* root2)
{if (root1 == NULL && root2 == NULL)return true;if (root1 == NULL || root2 == NULL)return false;if (root1->val != root2->val)return false;return isSymmetricSubTree(root1->left, root2->right)&& isSymmetricSubTree(root1->right, root2->left);
}bool isSymmetric(struct TreeNode* root)
{if (root == NULL)return true;return isSymmetricsubTree(root->left, root->right);
}

4.二叉树的前序遍历

在这里插入图片描述

struct TreeNode 
{int val;struct TreeNode *left;struct TreeNode *right;};//计算树的结点个数
int TreeSize(struct TreeNode* root)
{return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}
//前序遍历
void preorder(struct TreeNode* root, int* a, int* i)
{if (root == NULL)return;a[(*i)++] = root->val;preorder(root->left, a, i);preorder(root->right, a, i);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{//调用TreeSize函数决定开多大的空间*returnSize = TreeSize(root);//开空间int* a = (int*)malloc(*returnSize * sizeof(int));//若在子函数用局部变量i -- 在下一层递归改变i后 -- 返回到上一层用的仍是旧i -- 出现错误int i = 0;preorder(root, a, &i);return a;
}

5.二叉树的中序遍历

在这里插入图片描述

struct TreeNode
{int val;struct TreeNode* left;struct TreeNode* right;
};int TreeSize(struct TreeNode* root)
{return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}
void inorder(struct TreeNode* root, int* a, int* i)
{if (root == NULL)return;inorder(root->left, a, i);a[(*i)++] = root->val;inorder(root->right, a, i);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize)
{*returnSize = TreeSize(root);int* a = (int*)malloc(*returnSize * sizeof(int));int i = 0;inorder(root, a, &i);return a;
}

6.二叉树的后序遍历

在这里插入图片描述

struct TreeNode
{int val;struct TreeNode* left;struct TreeNode* right;
};int TreeSize(struct TreeNode* root)
{return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}
void posorder(struct TreeNode* root, int* a, int* i)
{if (root == NULL)return;posorder(root->left, a, i);posorder(root->right, a, i);a[(*i)++] = root->val;
}
int* posorderTraversal(struct TreeNode* root, int* returnSize)
{*returnSize = TreeSize(root);int* a = (int*)malloc(*returnSize * sizeof(int));int i = 0;posorder(root, a, &i);return a;
}

7.另一棵树的子树

在这里插入图片描述

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 (isSameTree(root, subRoot))return true;return isSubtree(root->left, subRoot)|| isSubtree(root->right, subRoot);
}

8.二叉树遍历

在这里插入图片描述

typedef char BTDataType;
typedef struct BinaryTreeNode
{struct BinaryTreeNode* left;struct BinaryTreeNode* right;BTDataType data;
}BTNode;//创建新结点
BTNode* CreatNode(BTDataType x)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));assert(node);node->data = x;node->left = NULL;node->right = NULL;return node;
}//建树
BTNode* CreateTree(char* str, int* i)
{if (str[*i] == '#'){(*i)++;return NULL;}//创建结点BTNode* root = CreatNode(str[(*i)++]);//连接子树root->left = CreateTree(str, i);root->right = CreateTree(str, i);return root;
}int main() 
{char str[100] = { 0 };scanf("%s", str);int i = 0;BTNode* root = CreateTree(str, &i);return 0;
}

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

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

相关文章

Virtualbox虚拟机中Ubuntu忘记密码

1、首先重新启动Ubuntu系统,鼠标快速点一下Virtualbox虚拟机窗口获取焦点,然后按住shift键,以调出grub启动菜单。 2、根据提示按下键盘E键进入编辑模式,向下移动光标,将如下"ro quiet splash $vt_handoff"部…

SpringBoot集成jasypt,加密yml配置文件

SpringBoot集成jasypt,加密yml配置文件 一、pom配置二、生成密文代码三、配置3.1、yml加密配置3.2、密文配置3.3、启动配置3.4、部署配置 四、遇到的一些坑 最新项目安全检测,发现配置文件中数据库密码,redis密码仍处理明文状态 一、pom配置…

一套AI+医疗模式的医院智慧导诊系统源码:springboot+redis+mybatis plus+mysql

一套AI医疗模式的医院智慧导诊系统源码 相关技术: 技术架构:springbootredismybatis plusmysqlRocketMQ 开发语言:java 开发工具:IDEA 前端框架:Uniapp 后端框架:springboot 数 据 库:mys…

【win11+vs 2017+OpenCV4.5.5+Qt5.12配置】解决了过程中遇到的小问题

0.版本选择 由于Qt5无法与最新的vs2022兼容,扩展工具中一直显示不可用,所以将vs降级成vs2017。 在安装Qt的过程中,会选择安装Qt套件,其中就的MCVS 2017,说明vs2017是与qt兼容的。 当然也可以用qt creator这一原生IDE。…

LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM 论文阅读

论文信息 题目:LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM 作者:Devendra Singh Chaplot, Dhiraj Gandhi 项目地址:https://devendrachaplot.github.io/projects/Neural-SLAM 代码地址:https://github.com/devendrachaplot/N…

ES6基础知识九:你是怎么理解ES6中Module的?使用场景?

一、介绍 模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。 两个基本的特征:外部特征和内部特征 外部特征是指模块跟外部环境联系的接口…

Stable Diffusion AI绘画学习指南【插件安装设置】

插件安装的方式 可用列表方式安装,点开Extensions 选项卡,找到如下图,找到Available选项卡,点load from加载可用插件,在可用插件列表中找到要装的插件按install 按扭按装,安装完后(Apply and restart UI)应…

15、两个Runner初始化器和 springboot创建非web应用

两个Runner初始化器 两个Runner初始化器——主要作用是对component组件来执行初始化 这里的Component组件我理解为是被Component注解修饰的类 Component //用这个注解修饰的类,意味着这个类是spring容器中的一个组件,springboot应用会自动加载该组件。 …

【原创】IPTVC2实现方案(文末有demo)

前言: 名词解释: IPTVC2, 全称: 央视国际节目定价发布接口规范,标准版本当前最新为2.7.12 附赠资源链接,侵删:规范 规范中提供的样例,实现基于axis1.4(2006的时代宠物) 基于axis1版本的实现参考: Spring boot 集成Axis1.4 ,使用wsdd文件发…

【CSDN】

欢迎使用Mark编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#xff0c…

自动驾驶感知系统-全球卫星定位系统

卫星定位系统 车辆定位是让无人驾驶汽车获取自身确切位置的技术,在自动驾驶技术中定位担负着相当重要的职责。车辆自身定位信息获取的方式多样,涉及多种传感器类型与相关技术。自动驾驶汽车能够持续安全可靠运行的一个关键前提是车辆的定位系统必须实时…

【数学建模】——拟合算法

【数学建模】——拟合算法 拟合算法定义:与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好&…

好用的Linux远程工具

你好,我是Martin,今天给大家介绍几款主流的远程工具。 远程工具介绍 关于远程连接的用户分类时这样的,通常需要进行远程连接的人有两类,一类是系统管理员,另一类是普通的用户。远程连接工具是一些可以让你通过网络连接…

2023年华数杯建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&#xff0…

Nacos配置中心设置Mongodb

目录 1.common模块导入nacos config依赖 2.common模块新建bootstrap.yaml 3.在自己的模块导入common模块依赖 4.打开nacos新建配置,发布 5.运行服务并测试 效果:在部署完成后,其他人可以自动连接到你本地mongoDB数据库,无需再…

建模教程:如何利用3ds Max 和 After Effects 实现多通道渲染和后期合成

推荐: NSDT场景编辑器 助你快速搭建可二次开发的3D应用场景 1. 创建基本场景 步骤 1 打开 3ds Max。 打开 3ds Max。 步骤 2 我做了一个简单的场景。我放了三个 彼此之间有一定距离的物体。 制作对象 步骤 3 按 Ctrl-C 键 在透视视图中创建摄影机。 创建相机 …

Android性能优化—LeakCanary内存泄漏检测框架分析。

一、什么叫内存泄漏、内存溢出? 内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个10M的Bitmap,但系统分配给APP的连续内存不足10M&#xff0c…

P3372 【模板】线段树 1(内附封面)

【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m,分别表示该数列数字的个数和操作的总个数。 …

数据库管理员知识图谱

初入职场的程序猿,需要为自己做好职业规划,在职场的赛道上,需要保持学习,并不断点亮自己的技能树。  成为一名DBA需要掌握什么技能呢,先让Chat-GPT为我们回答一下: 数据库管理系统 (DBMS)知识&#xff…

B079-项目实战--支付模块 定时任务 项目总结

目录 概述示例jar包配置类任务详情 项目应用封装的工具类QuartzUtils封装IQuartzSrvice和QuartzServiceImpl封装参数QuartzJobInfo编写任务逻辑MainJob调用第三方支付前添加定时任务异步回调后移除定时任务 订单支付整体流程 概述 优势:Tmer不支持持久化&#xff0…