判断一棵树是否是完全二叉树和求二叉树中两个节点的最近公共祖先——题集(十三)

二叉树相关编程题总结 关于二叉树的五道面试题的总结 求二叉树的最远两个结点的距离; 由前序遍历和中序遍历重建二叉树; 判断一棵树是否是完全二叉树; 求二叉树两个节点的最近公共祖先; 将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 注:本篇博客就这五道面试题,并不是单纯的给出求解代码,而是全面的进行分析,并进行问题的延伸,在求解过程中对问题的延伸都有代码的实现,so! 阅读详情

判断一棵树是否是完全二叉树和求二叉树中两个节点的最近公共祖先——题集(十三)

       今天来分享一下,如何判断一棵树是否是完全二叉树和求二叉树中两个节点的最近公共祖先的代码实现和运行示例。

      首先分享判断一棵树是否是完全二叉树的源代码和运行示例。

       提示:层序遍历变型题。

源代码如下:

#include<iostream>
using namespace std;
#include<queue>

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x)
		:val(x)
		,left(NULL)
		,right(NULL)
	{
    }
};

//判断一棵树是否是完全二叉树
bool IsCompleteBT(TreeNode* root){
	//递归层序遍历——队列
	//同一层前面结点没有孩子节点,后面也不可能有,设置标志位
	if(root==NULL) return true;//默认空树是完全二叉树
	bool flag=true;
	queue<TreeNode*> tmp;
	tmp.push(root);
	TreeNode* cur=NULL;

	while(!tmp.empty()){
		cur=tmp.front();
		tmp.pop();

		if(cur->left != NULL){
			if(flag)
			tmp.push(cur->left);
			else
				return false;
		}
		else
			flag=false;

		if(cur->right != NULL){
			if(flag)
			tmp.push(cur->right);
			else
				return false;
		}
		else
			flag=false;
	}
	return true;
}

void TestTree(){////判断一棵树是否是完全二叉树
	TreeNode * pRoot1=new TreeNode(1);
	TreeNode * pRoot2=new TreeNode(2);
	TreeNode * pRoot3=new TreeNode(3);
	TreeNode * pRoot4=new TreeNode(4);
	TreeNode * pRoot5=new TreeNode(5);
	TreeNode * pRoot6=new TreeNode(6);
	TreeNode * pRoot7=new TreeNode(7);
	TreeNode * pRoot8=new TreeNode(8);
	TreeNode * pRoot9=new TreeNode(9);

	cout<<"判断一棵树是否是完全二叉树"<<endl<<endl;
	pRoot1->right = pRoot3;
	cout<<"IsCompleteBT(pRoot1): "<<IsCompleteBT(pRoot1)<<endl;//判断一棵树是否是完全二叉树

	pRoot1->left = pRoot2;
	cout<<"IsCompleteBT(pRoot1): "<<IsCompleteBT(pRoot1)<<endl;

	pRoot3->left = pRoot6;
	pRoot3->right = pRoot7;
	cout<<"IsCompleteBT(pRoot1): "<<IsCompleteBT(pRoot1)<<endl;

	pRoot2->left = pRoot4;
	pRoot2->right = pRoot5;
	cout<<"IsCompleteBT(pRoot1): "<<IsCompleteBT(pRoot1)<<endl;
}

int main(){
	TestTree();////判断一棵树是否是完全二叉树
	
	system("pause");
	return 0;
}

运行结果:

 

       求二叉树中两个节点的最近公共祖先的源代码和运行示例。 

       要求考虑以下三种种情况,给出解决方案,并解决:

1:二叉树的每个节点有parent(三叉链)

源代码如下:

#include<iostream>
using namespace std;
#include<stack>

//求二叉树中两个节点的最近公共祖先
//1:二叉树每个节点有parent(三叉链) 
struct TreeNodeT {
    int _val;
    struct TreeNodeT * _parent;
    struct TreeNodeT * _left;
    struct TreeNodeT * _right;
    TreeNodeT(int x) :
            _val(x), _left(NULL), _right(NULL),_parent(NULL){
    }
};

TreeNodeT* LeastCommonAN1(TreeNodeT*  p1,TreeNodeT* p2){//求二叉树中两个节点的最近公共祖先——二叉树每个节点有parent
	if(p1==NULL) return p2;
	if(p2==NULL) return p1;
	if(p1->_val == p2->_val) return p1;
	stack<TreeNodeT*> tmp1;
	stack<TreeNodeT*> tmp2;
	TreeNodeT*  cur1=p1;
	TreeNodeT*  cur2=p2;

	while(cur1->_parent != NULL){
		if(cur1->_parent->_val  == p2->_val) return p2;
		cur1=cur1->_parent;
		tmp1.push(cur1);
	}

	while(cur2->_parent != NULL){
		if(cur2->_parent->_val  == p1->_val) return p1;
		cur2=cur2->_parent;
		tmp2.push(cur2);
	}
	TreeNodeT* root=NULL;
	while(!tmp1.empty() && !tmp2.empty()){
		if(tmp1.top()->_val == tmp2.top()->_val){
			root=tmp1.top();
		}
		else{
			return root;
		}

		tmp1.pop();
		tmp2.pop();
	}

	return NULL;
}

void TestT1(){//求二叉树中两个节点的最近公共祖先——二叉树每个节点有parent
	TreeNodeT * pRoot1=new TreeNodeT(1);
	TreeNodeT * pRoot2=new TreeNodeT(2);
	TreeNodeT * pRoot3=new TreeNodeT(3);
	TreeNodeT * pRoot4=new TreeNodeT(4);
	TreeNodeT * pRoot5=new TreeNodeT(5);
	TreeNodeT * pRoot6=new TreeNodeT(6);
	TreeNodeT * pRoot7=new TreeNodeT(7);
	TreeNodeT * pRoot8=new TreeNodeT(8);
	TreeNodeT * pRoot9=new TreeNodeT(9);

	pRoot1->_left = pRoot2;
	pRoot2->_parent = pRoot1;

	pRoot1->_right = pRoot3;
	pRoot3->_parent = pRoot1;

	pRoot2->_left = pRoot4;
	pRoot4->_parent = pRoot2;

	pRoot2->_right = pRoot5;
	pRoot5->_parent = pRoot2;

	pRoot3->_left = pRoot6;
	pRoot6->_parent = pRoot3;
	
	pRoot3->_right = pRoot7;
	pRoot7->_parent = pRoot3;
	
	pRoot4->_left = pRoot8;
	pRoot8->_parent = pRoot4;

	cout<<"求二叉树中两个节点的最近公共祖先——二叉树每个节点parent"<<endl<<endl;

	TreeNodeT* root= LeastCommonAN1(pRoot8,pRoot3);
	if(root!=NULL)
		cout<<"LeastCommonAN1(pRoot8,pRoot3): "<<root->_val<<endl;
	else
		cout<<"LeastCommonAN1(pRoot8,pRoot3): 不存在"<<endl;
	cout<<endl;

	root= LeastCommonAN1(pRoot4,pRoot6);
	if(root!=NULL)
		cout<<"LeastCommonAN1(pRoot4,pRoot6): "<<root->_val<<endl;
	else
		cout<<"LeastCommonAN1(pRoot4,pRoot6): 不存在"<<endl;
	cout<<endl;


	root= LeastCommonAN1(pRoot2,pRoot6);
	if(root!=NULL)
		cout<<"LeastCommonAN1(pRoot2,pRoot6): "<<root->_val<<endl;
	else
		cout<<"LeastCommonAN1(pRoot2,pRoot6): 不存在"<<endl;
	cout<<endl;


	root= LeastCommonAN1(pRoot8,pRoot2);
	if(root!=NULL)
		cout<<"LeastCommonAN1(pRoot8,pRoot2): "<<root->_val<<endl;
	else
		cout<<"LeastCommonAN1(pRoot8,pRoot2): 不存在"<<endl;
	cout<<endl;


	root= LeastCommonAN1(pRoot8,pRoot9);
	if(root!=NULL)
		cout<<"LeastCommonAN1(pRoot8,pRoot9): "<<root->_val<<endl;
	else
		cout<<"LeastCommonAN1(pRoot8,pRoot9): 不存在"<<endl;
	cout<<endl;

	root= LeastCommonAN1(pRoot1,pRoot9);
	if(root!=NULL)
		cout<<"LeastCommonAN1(pRoot1,pRoot9): "<<root->_val<<endl;
	else
		cout<<"LeastCommonAN1(pRoot1,pRoot9): 不存在"<<endl;
	cout<<endl;
}

int main(){
		TestT1();//求二叉树中两个节点的最近公共祖先——二叉树每个节点有parent
	
	system("pause");
	return 0;
}

运行结果:

 

2:二叉树是搜索二叉树。

源代码如下:

#include<iostream>
using namespace std;
#include<queue>

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x)
		:val(x)
		,left(NULL)
		,right(NULL)
	{
    }
};

//2:二叉树是搜索二叉树。 它或者是一棵空树,或者是具有下列性质的二叉树:
//若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
//若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 
//它的左、右子树也分别为二叉排序树。
//中序遍历有序
bool IsAncent(TreeNode*  p1,TreeNode* p2){//判断p1是否是p2的祖先结点
	if(p1==NULL|| p2==NULL) return false;
	if(p1->val == p2->val) return true;
	else if(p1->val > p2->val){
		return  IsAncent(p1->left,p2);
	}
	else{
		return IsAncent(p1->right,p2);
	}
}

void _Find2(queue<TreeNode*>& tmp, TreeNode* root,TreeNode*  p){//得到从根到P结点的路径
	while(root!=NULL){
		if(root->val == p->val){
			break;
		}
		else if(root->val > p->val){
			tmp.push(root);
			root = root->left;
		}
		else{
			tmp.push(root);
			root = root->right;
		}
	}
}

TreeNode* LeastCommonAN2(TreeNode*  root,TreeNode*  p1,TreeNode* p2){//求二叉树中两个节点的最近公共祖先——二叉树是搜索二叉树
	if(root==NULL) return root;
	if(p1==NULL) return p2;
	if(p2==NULL) return p1;
	if(IsAncent(p1,p2)) return p1;//判断p1是否是p2的祖先结点
	if(IsAncent(p2,p1)) return p2;//判断p2是否是p1的祖先结点

	queue<TreeNode*> tmp1;
	TreeNode* cur=root;
	_Find2( tmp1, cur, p1);//得到从根到P1结点的路径
	if(cur==NULL) return NULL;//p1不在该树中

	queue<TreeNode*> tmp2;
	cur=root;
	_Find2( tmp2, cur, p2);//得到从根到P2结点的路径
	if(cur==NULL) return NULL;//p2不在该树中

	TreeNode* aim=NULL;

	while(!tmp1.empty() && !tmp2.empty()){
		if(tmp1.front()->val == tmp2.front()->val){
			aim=tmp1.front();
		}
		else{
			return aim;
		}

		tmp1.pop();
		tmp2.pop();
	}

	return aim;
}

void TestT2(){//求二叉树中两个节点的最近公共祖先——二叉树是搜索二叉树
	TreeNode * root0=new TreeNode(8);
	TreeNode * root1=new TreeNode(5);
	TreeNode * root2=new TreeNode(14);
	TreeNode * root3=new TreeNode(2);
	TreeNode * root4=new TreeNode(6);
	TreeNode * root5=new TreeNode(18);

	root0->left = root1;
	root0->right = root2;
	root1->left = root3;
	root1->right = root4;
	root2->right = root5;


	cout<<"求二叉树中两个节点的最近公共祖先——二叉树是搜索二叉树"<<endl<<endl;
	TreeNode* root= LeastCommonAN2(root0,root4, root3);
	if(root!=NULL)
		cout<<"LeastCommonAN2(root0,root4, root3): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN2(root0,root4, root3): 不存在"<<endl;
	cout<<endl;

	root= LeastCommonAN2(root0,root4,root5);
	if(root!=NULL)
		cout<<"LeastCommonAN2(root0,root4, root5): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN2(root0,root4, root5): 不存在"<<endl;
	cout<<endl;

	root= LeastCommonAN2(root0,root2,root5);
	if(root!=NULL)
		cout<<"LeastCommonAN2(root0,root2, root5): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN2(root0,root2, root5): 不存在"<<endl;
	cout<<endl;
}

int main(){
	TestT2();//求二叉树中两个节点的最近公共祖先——二叉树是搜索二叉树
	
	system("pause");
	return 0;
}

运行结果:

 

3:就是普通二叉树。(尽可能实现时间复杂度为O(N))

源代码如下:

#include<iostream>
using namespace std;
#include<stack>

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x)
		:val(x)
		,left(NULL)
		,right(NULL)
	{
    }
};

//3:就是普通二叉树。
void _Find3(stack<TreeNode*>& tmp, TreeNode*  root,TreeNode*  p){//得到从根到P1结点的路径
	TreeNode* cur=root;
	TreeNode* prev=NULL;
	while(cur!=NULL || !tmp.empty()){//后序
		while(cur && cur != prev){
			tmp.push(cur);
			if(cur->val == p->val){
				return ;
			}
			cur=cur->left;
		}


		if(tmp.top()->right == prev || tmp.top()->right == NULL)
		 {
			prev = tmp.top();
			tmp.pop();
		}
		if(!tmp.empty())
		cur=tmp.top()->right;
		else
			break;
	}
	return ;
}

//把以p1和p2的路径求出来找相同即可,不分是否以p1和p2为公共结点
TreeNode* LeastCommonAN3(TreeNode*  root,TreeNode*  p1,TreeNode* p2){
	if(root==NULL) return root;
	TreeNode* cur=root;

	stack<TreeNode*> tmp1;
	_Find3(tmp1, cur,p1);//得到从根到P1结点的路径

	stack<TreeNode*> tmp2;
	cur=root;
	_Find3(tmp2, cur,p2);//得到从根到P1结点的路径

	TreeNode* aim=NULL;

	while(!tmp1.empty() && !tmp2.empty()){
			while(tmp1.size()!= tmp2.size()){
				if(tmp1.size()> tmp2.size())
					tmp1.pop();
				else
					tmp2.pop();
			}
		//找到第一个相似结点
			if(tmp1.top()->val == tmp2.top()->val){
				aim=tmp1.top();
				return aim;
			}

			tmp1.pop();
			tmp2.pop();
	}

		return aim;
}

void TestTree3(){//求二叉树中两个节点的最近公共祖先——二叉树是普通二叉树
	TreeNode * pRoot1=new TreeNode(1);
	TreeNode * pRoot2=new TreeNode(2);
	TreeNode * pRoot3=new TreeNode(3);
	TreeNode * pRoot4=new TreeNode(4);
	TreeNode * pRoot5=new TreeNode(5);
	TreeNode * pRoot7=new TreeNode(7);
	TreeNode * pRoot8=new TreeNode(8);
	TreeNode * pRoot9=new TreeNode(9);

	pRoot1->left = pRoot2;
	pRoot1->right = pRoot3;
	pRoot2->left = pRoot4;
	pRoot2->right = pRoot5;
	pRoot3->right = pRoot7;
	pRoot4->left = pRoot8;

	cout<<"求二叉树中两个节点的最近公共祖先——普通二叉树"<<endl<<endl;
	TreeNode* root= LeastCommonAN3(pRoot1,pRoot8,pRoot3);
	if(root!=NULL)
		cout<<"LeastCommonAN3(pRoot1,pRoot8,pRoot3): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN3(pRoot1,pRoot8,pRoot3): 不存在"<<endl;
	cout<<endl;

	
	root= LeastCommonAN3(pRoot1,pRoot9,pRoot3);
	if(root!=NULL)
		cout<<"LeastCommonAN3(pRoot1,pRoot9,pRoot3): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN3(pRoot1,pRoot9,pRoot3): 不存在"<<endl;
	cout<<endl;

	root= LeastCommonAN3(pRoot1,pRoot4,pRoot7);
	if(root!=NULL)
		cout<<"LeastCommonAN3(pRoot1,pRoot4,pRoot7): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN3(pRoot1,pRoot4,pRoot7): 不存在"<<endl;
	cout<<endl;


	root=LeastCommonAN3(pRoot1,pRoot8,pRoot5);
	if(root!=NULL)
		cout<<"LeastCommonAN3(pRoot1,pRoot8,pRoot5): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN3(pRoot1,pRoot8,pRoot5): 不存在"<<endl;
	cout<<endl;


	root= LeastCommonAN3(pRoot1,pRoot8,pRoot9);
	if(root!=NULL)
		cout<<"LeastCommonAN3(pRoot1,pRoot8,pRoot9): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN3(pRoot1,pRoot8,pRoot9): 不存在"<<endl;
	cout<<endl;


	root= LeastCommonAN3(pRoot1,pRoot1,pRoot7);
	if(root!=NULL)
		cout<<"LeastCommonAN3(pRoot1,pRoot1,pRoot7): "<<root->val<<endl;
	else
		cout<<"LeastCommonAN3(pRoot1,pRoot1,pRoot7): 不存在"<<endl;
	cout<<endl;
}

int main(){
		TestTree3();//求二叉树中两个节点的最近公共祖先——二叉树是普通二叉树
	
	system("pause");
	return 0;
}

运行结果:

 

分享如上,如有错误,望斧正!愿大家学得开心,共同进步!

二叉树的五道面试题 1、判断一棵树是否是完全二叉树; 2、求二叉树中最远两个结点的距离; 3、由前序和中序遍历序列重建二叉树 (前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5); 4、求二叉树两个结点的最近公共祖先; 5、将二叉搜索树转化成有序的双向链表; 判断一棵树是否是完全二叉树 要想判断一颗树是否是完全二叉树,你得先知道什么是完全二叉树。 完全二 阅读详情

相关推荐

【数据结构】二叉树面试题总结

为了对二叉树的知识进行巩固,今天我们来解析5道二叉树的经典面试题。 这五道面试题如下: 求二叉树中最远两个结点的距离; 判断一棵树是否是完全二叉树; 由前序和中序遍历序列重建二叉树 (前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5); 求二叉树两个结点的最近公共祖先; 将二叉搜索树转化成有序的双向链表;现在我们来对这五道题进行分析: 求二叉树中最远的两个节点之间的距离这

leap的博客 2893

【数据结构】二叉树篇|超清晰图解和详解:二叉树的最近公共祖先

首先要明白,当root为p,q的最近祖先节点,只有下面3种情况: 1. p,q在root分别存在于root的左右子树中(异侧)——>root即为最近祖先节点 2. p, q均在root的左侧——>p/q即为最近祖先节点 3. p, q均在root的右侧——>同理

Yaoyao2024的博客 5720

Java实现二叉树最近公共祖先问题

在树形数据结构中,最近公共祖先(LCA)是连接两个节点的路径上的最低节点,这个节点是两个节点的共同祖先,同时也是最近的那一个。LCA的概念在树结构的路径查询、网络设计、分布式系统以及一些图形用户界面(GUI)应用中尤为重要。最近公共祖先的概念允许我们快速查询树中节点间的关系。例如,在GUI中,可以确定窗口和它们的共同父级,或者在文件系统中,确定两个文件夹的最近共同父文件夹。树结构中找到LCA可以帮助我们更高效地解决问题,如查询两个节点的最小距离、判断一个节点是否是另一个节点的子树的一部分等。

weixin_36311421的博客 996

数据结构关于链表的代码如下

//注意:该文件操作的单链表为带头结点单链表,头结点数据为-1#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;time.h&gt;#define OK 1#define ERROR 0typedef int ;typedef struct Node{ data_t data; struct Node *next;}Nod...

hash_world的博客 456

二叉树最近最近公共祖先

Java语言,通过栈的方法建立二叉树,递归求最近共同祖先结点

Android Profiler实战:如何用CPU分析工具揪出卡顿元凶(附线程状态解读)

本文深入解析Android Profiler中的CPU分析工具,重点聚焦线程活动监控。通过解读线程状态时间轴上的绿、黄、灰三色含义,并结合实战案例,指导开发者精准定位导致界面卡顿的CPU密集型或I/O阻塞代码,有效提升应用性能与用户体验。

weixin_29197699的博客 372

c 语言 1165实数的小数部分 指针专题

/***** 题目描述 读入一个实数,输出该实数的小数部分,小数部分若多余的末尾0,请去掉。如输入111111.12345678912345678900 则输出0.123456789123456789。若去掉末尾0之后小数部分为0,则输出“No decimal part”。注意该实数的位数不超过100位。 请定义并使用如下函数。 char *decimal(char *p) { 将字符串p表示的实...

qq_39345244的博客 965

Windows与Linux安装miniconda并启动python项目及指令

官方介绍:Miniconda 是 conda 的免费最小安装程序。它是 Anaconda 的一个小型引导版本,仅​​包含 conda、Python、它们都依赖的包以及少量其他有用的包(例如 pip、zlib 等)。如果您需要更多软件包,请使用该 命令从 Anaconda 公共存储库或其他渠道(例如 conda-forge 或 bioconda)默认提供的数千个软件包中进行安装。minicoda下载地址最好挂个梯子。如果你需要指定版本的conda,可以在这里下载历史版本的miniconda。

一直走的很慢的鸭子 3192

数据结构与算法---二叉树---二叉树的最近公共祖先、恢复二叉搜索树

二叉树的绝大部分题目都可以直接通过递归+遍历解决 以下,必须掌握: 树的高度-递归 前中后序遍历 层序遍历 翻转二叉树 二叉树的最近公共祖先 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,

IOSSHAN的博客 420

如何用Python+Librosa实现轴承异响检测?5步搞定工业设备故障预警

本文详细介绍了如何利用Python和Librosa库,通过5个步骤构建工业轴承异响检测与故障预警系统。从音频采集、预处理、频谱特征提取,到构建机器学习模型并进行实时监测,提供了完整的代码级解决方案。该方法能有效识别轴承早期故障特征,实现低成本、高效的设备预测性维护。

rnn9storyteller的博客 633

[苹果开发者账号]03 申请APPID、苹果开发者账号 常见问题整理

目录:问题持续更新问题一:提示:抱歉,您暂时不能注册问题二:Apple Developer Support提示:联系我们以继续流程 问题一:提示:抱歉,您暂时不能注册 申请苹果开发者账号,应该先注册AppleID,由于很多都是申请的公司使用的苹果开发者账号。一般操作申请动作的人,可能是新手操作,也可能图方便,有些信息会随便填写。 有些人会把姓名填写为,公司的产品、简称、缩写等等。这是不对的。 还有出生日期也会随便乱填。生日如果填写的不对,会被苹果限制使用一些功能的(苹果给的提示不是太明确)。 当生日填写的

专注于技术开发、项目管理 1万+

二叉树的公共祖先

本文首先会介绍什么是最近公共祖先,接着将会针对该问题介绍几种求解方法,也是本文的核心内容。

weixin_54383080的博客 2706

评估篇| 大模型评测综述

1、基于人类的评测。与针对基础大语言模型的自动化评测不同,微调大语言模型的评测更加注重模型在实际应用场景中的表现,如与人类交互的自然度、对齐度等。2、基于模型的评测。例如,AlpacaEval 排行榜 基于由大语言模型合成的人类需求指令作为评测任务,然后收集待评估大模型的回应,并采用 GPT-4 等大语言模型作为评测员,将待评估大语言模型的输出与参考输出进行成对比较。1、大语言模型对评估设置极为敏感,包括问题的表述方式、提示样本的选择以及答案的解析策略等,这些细微的差别都可能导致评估结果的显著变化。

youbingchen的博客 637

力扣236——二叉树的最近公共祖先

祝大家新年快乐呀,虽这段时间正值过年,但是我们不要忘记停下学习的脚步。今天我们一起看一到力扣上的经典二叉树OJ题,求二叉树两个结点最近的公共祖先。链接给大家放在这里啦,大家一点即达首先我们看到题目,这道题并没有告诉我们这是一棵怎么样的二叉树,不是完全二叉,也不是搜索二叉,所以这道题做起来就比较棘手,完全二叉树的话我们可以根据结点的编号查找,搜索二叉我们也可以按照大小确定范围,但是眼前这颗数完全是一个乱序的,所以这道题怎么下手呢?

weixin_67131528的博客 1156

SOC、SOH、OCV

1)放电实验法的测量SOH结果最为准确,但是深度放电会对影响电池的寿命;2)电阻折算法仅将电阻作为评价SOH的依据,但电池老化时电阻的变化范围较小,因此该方法的误差较大;3)电阻折算法需要对电池进行大量的实验,绘制成Map图,但是该方法有一定的局限性,针对不同的电池需要绘制不同的Map图;4)阻抗分析法是目前最为前沿的方法,可以根据阻抗谱较为直观的分析SOH的变化,但是该方法需要的成本较高,每台设备约为5万美元。

m0_61973119的博客 2万+

【报错解决】OpenClaw 报错 ENOENT: no such file or directory, open ‘/root/.npmrc‘:配置文件路径不存在

本文分析了OpenClaw平台在国产操作系统环境下运行时出现的ENOENT: no such file or directory, open '/root/.npmrc'错误。该问题源于容器环境中root用户的npm配置文件缺失,导致插件依赖安装失败。文章详细解释了npm配置加载机制和容器环境的特殊性,提出了四种解决方案:手动创建配置文件、写入基础配置、使用全局配置替代以及容器启动时自动初始化。最后指出该错误暴露了工程中对默认路径盲目信任的问题,强调显式声明运行环境依赖的重要性。

博客 2016

求二叉树两个结点的最近公共祖先

题目描述: 一颗二叉树按顺序存储结构进行存储,设计一个算法,求编号i和j的最近公共祖先 思路: 已知:二叉树、顺序存储 空的结点用“#”表示 如果i,j所在位置的结点数据不是“#”,才有公共结点; 若i<j,则j和i可能在同一层,或者比i的层数高,找j的双亲结点,j/2,再重复进行比较; 若i>j,则i和j可能在同一层,或者比j的层数高,找i的双亲结点,i/2,再重复进行比较; 直到i...

韩豆豆小姐的博客 1709

基于 Arduino 的鱼缸水质检测控制系统设计

本系统通过多传感器实时采集鱼缸水质参数(pH 值、温度、溶解氧、浊度),经 Arduino 主控芯片处理后,驱动执行模块自动调节水质,并通过显示模块实时展示数据。系统具备阈值报警、自动换水、温度调节、增氧等功能,适用于家庭或小型水族箱的水质智能管理。本设计提供了低成本、易扩展的鱼缸水质管理方案,适用于家庭水族箱或小型水产养殖场景,可根据实际需求调整传感器类型和控制逻辑。注:本设计如有疑问需要解惑可直接私信本人,看我个人简介。

weixin_42300449的博客 1087

CSU - 1213 二叉树结点公共祖先 && 51Nod - 2599 最近公共祖先(LCA)

51Nod - 2599 最近公共祖先(LCA)https://vjudge.net/problem/51Nod-2599 LCA(Lowest Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个节点u和v最近的公共祖先。(若u为v的祖先或者v为u的祖先,则LCA(u,v)就是作为祖先的那个节点) 现在有一棵以1为根的有根树,树上一共有n个节点。现在有m次查询,...

一定要站在自己热爱的生活里闪闪发光 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

寻找二叉树中两个结点的最近公共祖先

Node* FindNode(Node*root,Node*p) { if (root == NULL) return NULL; if (root == p) return root; if (FindNode(root->left, p)) return FindNode(root->left, p); return FindNode(root->righ...

不积极分子 1724

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode算法小抄-- 最近公共祖先 和 完全二叉树的节点个数

LeetCode算法小抄-- 最近公共祖先 和 完全二叉树的节点个数

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 738

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

算法-二叉树的最近公共祖先

算法-二叉树的最近公共祖先二叉树的最近公共祖先 二叉树的最近公共祖先 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3...

qq_23594799的博客 721

十九、二叉树的最近的公共祖先

十九、二叉树的最近的公共祖先 文章目录十九、二叉树的最近的公共祖先题目描述解题思路上机代码: 题目描述 设顺序存储的二叉树中有编号为 i 和 j 的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。 输入: ​ 输入第1行给出正整数n(≤1000),即顺序存储的最大容量; 第2行给出n个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树); 第3行给出一对结点编号 i 和 j 。 题目保证输入正确对应一棵二叉树,且1≤ i,j ≤n。 输出: 如果i或j对应的是

qq_42582489的博客 640

python coding with ChatGPT 打卡第21天| 二叉树:最近公共祖先

二叉树的最近公共祖先

baidu_33000721的博客 1470

【牛客网面试必刷TOP101】二叉树篇(二)

二叉树是数据结构中重要的一个章节,他的重要性也不言而喻,在未来不管是笔试还是面试都会遇到这类的题目,所以接下来我就会把一些常考的题目全部整理出来供大家学习指正。

qq_66314292的博客 1975

求完全二叉树中的最近公共祖先(数组形式存放节点)

完全二叉树的最近公共祖先 题目描述 完全二叉树采用数组存放,在数组中找到v1和v2的最近公共祖先 思路 将数组的索引当做二叉树的节点,当前节点为root,其左子树为left = root * 2 + 1;右子树为 right = left + 1;, 递归三部曲 返回值和参数:输入当前的数组以及起始点root = 0,两个节点值v1和v2,输出v1和v2的最近公共祖先 单层递归逻辑:当前节点等于v1或者v2时返回当前节点,当前节点不为v1或者v2,遍历它的左子树和右子树,如果左子树返回-1,说明v1和v2

Lc_summer的博客 1647
上一篇: 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
下一篇: 由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态——题集(十四)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值