链式二叉树oj题

1.输入k ,找第k层节点个数

int TreeKlevel(BTNode*root,int k) {

	if (root == NULL) {
		return 0;
	}
	if (k == 1) {
		return 1;
	}
	
	return TreeKlevel(root->left, k - 1)+
	TreeKlevel(root->right, k - 1);
}

在这里我们要确定递归子问题,第一个就是NULL时返回,还有一个就是k=1时就是我们要找的层数。

2.输入一个数,查找该数,找到了返回其地址。

BTNode* TreeFind(BTNode* root, int x) {
	if (root == NULL) {
		return NULL;
	}
	if (root->val == x) {
		return root;
	}
	BTNode* ret1 = TreeFind(root->left, x);
	if (ret1)
		return ret1;
	BTNode* ret2 = TreeFind(root->right, x);
	if (ret2)
		return ret2;

	return NULL;
}

在这里我们需要弄明白的是,在某个开辟的栈帧中找到了该数据,直接返回其指针,是得不到它的地址的。

3.判断两棵树是相同的

bool isSametree(BTNode* root1, BTNode* root2) {
	//都为空
	if (root1 == NULL && root2 == NULL) {
		return true;
	}
	//其中一个为空
	if (root1 == NULL || root2 == NULL) {
		return false;
	}
	if (root1->val != root2->val) {//判断值是否相同
		return false;

}
	return isSametree(root1->left, root2->left) &&
		isSametree(root1->right, root2->right);
}

4.判断是否为镜像/对称二叉树,也就是左右子树是否相同

bool _isSymmetric(BTNode* root1, BTNode* root2) {
	//根比较
	//左子树和右子树比较
	//右子树和左子树比较
	//都为空
	if (root1 == NULL && root2 == NULL) {
		return true;
	}
	//一个为空一个不为空
	if (root1 == NULL || root2 == NULL) {//短路求值
		return false;
	}
	if (root1->val != root2->val) {
		return false;
	}
	return _isSymmetric(root1->left, root2->right) &&
		_isSymmetric(root1->right, root2->left);
}
bool isSymmetri(BTNode* root) {
	return _isSymmetric(root->left, root->right);//将根的两个子树传递给子函数
}

5.在一棵树上找另一棵树

bool issubTree(BTNode* root, BTNode* subroot) {
	if (root == NULL)
		return false;
	if (root->val == subroot->val&& isSametree(root, subroot)) {//当遍历时发现根相同时才开始遍历比较
		//为了防止不止一处地方根相同且有一处根相同的地方并不完全相等,所以我们需要这两个条件同时成立才返回true.
		return true;
	}
	//遍历
	return issubTree(root->left,subroot) || issubTree(root->right,subroot);
}

这里与其他函数结合可以更好地解决问题。

谢谢

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强化学习中的Q-Learning和Sarsa算法详解及实战

强化学习(Reinforcement Learning, RL)是一种通过与环境交互来学习最优策略的机器学习方法。在强化学习中,Q-Learning和Sarsa是两种重要的基于值的算法。本文将详细讲解这两种算法,并通过实际代码示例展示其应用。 1. 强化学习基…

algorithm算法库学习之——不修改序列的操作

algorithm此头文件是算法库的一部分。本篇介绍不修改序列的操作函数。 不修改序列的操作 all_ofany_ofnone_of (C11)(C11)(C11) 检查谓词是否对范围中所有、任一或无元素为 true (函数模板) for_each 应用函数到范围中的元素 (函数模板) for_each_n (C17) 应用一个函数对象到序…

Vue88-Vuex中的mapActions、mapMutations

一、mapMutations的调用 此时结果不对,因为:若是点击事件不传值,默认传的是event!,所以,修改如下: 解决方式1: 解决方式2: 不推荐,写法麻烦! 1-…

排序算法简述(第八jiang)

目录 排序 选择排序 O(n2) 不稳定:48429 归并排序 O(n log n) 稳定 插入排序 O(n2) 堆排序 O(n log n) 希尔排序 O(n log2 n) 图书馆排序 O(n log n) 冒泡排序 O(n2) 优化: 基数排序 O(n k) 快速排序 O(n log n)【分治】 不稳定 桶排序 O(n…

【图解大数据技术】Flume、Kafka、Sqoop

【图解大数据技术】Flume、Kafka、Sqoop FlumeFlume简介Flume的应用场景 KafkaKafka简介Kafka架构Flume与Kafka集成 SqoopSqoop简介Sqoop原理sqoop搭配任务调度器实现定时数据同步 Flume Flume简介 Flume是一个数据采集工具,多用于大数据技术架构下的日志采集。 …

设计模式之模版方法

模版方法介绍 模版方法(Template Method)模式是一种行为型设计模式,它定义了一个操作(模板方法)的基本组合与控制流程,将一些步骤(抽象方法)推迟到子类中,使得子类可以在…

C语言下的文件详解

主要内容 文件概述文件指针文件的打开与关闭文件的读写 文件 把输入和输出的数据以文件的形式保存在计算机的外存储器上,可以确保数据能随时使用,避免反复输入和读取数据 文件概述 文件是指一组相关数据的有序集合 文件是存储数据的基本单位&#…

# mysql 中文乱码问题分析

mysql 中文乱码问题分析 一、问题分析: MySQL 中文乱码通常是因为字符集设置不正确导致的。MySQL 有多种字符集,如 latin1、utf8、utf8mb4 等,如果在创建数据库、数据表或者字段时没有指定正确的字符集,或者在插入数据时使用了与…

关于Java异常机制及finally关键字的详解

异常机制(Exception) 软件程序在运行过程中,非常可能遇到异常问题。常见的异常: 1、用户输入错误 2、设备错误 3、硬件问题,例如打印机关掉、服务器问题 4、物理限制:磁盘满了 Java是采用面向对象的方式来处理异常的。 处理过程…

哈希表——C语言

哈希表(Hash Table)是一种高效的数据结构,能够在平均情况下实现常数时间的查找、插入和删除操作。 哈希表的核心是哈希函数,哈希函数是一个将输入数据(通常称为“键”或“key”)转换为固定长度的整数的函数…

使用vue3-treeselect问题

1.当vue3-treeselect是单选时,使用watch监听绑定value,无法监听到值清空 对照后将:value改为v-model,如图 2.使用vue3-treeselect全部清空按钮如何置空select的值,使用watch监听 多选:pageInfo.officeName(val) {// …

【Linux进阶】文件系统6——理解文件操作

目录 1.文件的读取 1.1.目录 1.2.文件 1.3.目录树读取 1.4.文件系统大小与磁盘读取性能 2.增添文件 2.1.数据的不一致(Inconsistent)状态 2.2.日志式文件系统(Journaling filesystem) 3.Linux文件系统的运行 4、文件的删…

Java--方法重写

1.方法的重写首先需要有继承关系,且为子类重写父类的方法 2.方法名必须相同 3.参数列表必须相同 4.修饰符的范围可以扩大但不能缩小,public>protected>default>private,即父类的属性可以从private改为public,但不能反过来 5.抛出…

python爬虫入门(四)之Beautiful Soup库

一、什么是Beautiful Soup库 1、Beautiful Soup库是用来做HTML解析的库 Beautiful Soup把看起来复杂的HTML内容,解析成树状结构,让搜索和修改HTML结构变得更容易 2、第三方库,先安装 终端输入pip install bs4 from bs4 import Beautiful…

Cyber Weekly #14:WAIC 2024

赛博新闻 1、WAIC2024开幕:一半机器人,一半大模型 7月4日,AI界春晚——2024世界人工智能大会(WAIC 2024)在上海开幕,大会展示了500家企业的1500项展品,突出了机器人和大模型技术。国产机器人和…

【排序算法】—— 快速排序

快速排序的原理是交换排序,其中qsort函数用的排序原理就是快速排序,它是一种效率较高的不稳定函数,时间复杂度为O(N*longN),接下来就来学习一下快速排序。 一、快速排序思路 1.整体思路 以升序排序为例: (1)、首先随…

学生管理系统(通过顺序表,获取连续堆区空间实现)

将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数 : 1】顺序表的创建, 2】判满、 3】判空、 4】往顺序表里增加学生信息、 5】遍历学生信息 6】任意位置插入学生信息 7】任意位置删除学生信…

【大模型LLM面试合集】大语言模型基础_llm概念

1.llm概念 1.目前 主流的开源模型体系 有哪些? 目前主流的开源LLM(语言模型)模型体系包括以下几个: GPT(Generative Pre-trained Transformer)系列:由OpenAI发布的一系列基于Transformer架构…

对话大模型Prompt是否需要礼貌点?

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 基于Dify的QA数据集构建(附代码)Qwen-2-7B和GLM-4-9B&#x…

Android OpenGL ES 离屏幕渲染1——EGL环境的创建,以及基础概念的理解

创建EGL上下文、配置EGL环境、创建EGL DISPLAY 什么是EGL: 由于OpenGL ES并不负责窗口管理以及上下文管理,该职责由各个平台自行完成;在Android平台下OpenGL ES的上下文环境是依赖EGL的API进行搭建的。 对于EGL这个框架,谷歌已经提…