首页 > 其他分享 >天梯赛 L2-004 这是二叉搜索树吗? 数据结构

天梯赛 L2-004 这是二叉搜索树吗? 数据结构

时间:2024-12-02 19:54:14浏览次数:7  
标签:node right return int 二叉 L2 004 NULL left

反思:使用指针前先分配内存。

#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
	int data;
	struct node* left;
	struct node* right;
}*T;
queue<int>q1;
queue<int>q2;
queue<int>q3;
T result;
void built1(T &t,int x)
{
	if(t==NULL)
	{
		t=new node;
		t->data=x;
		t->left=NULL;
		t->right=NULL;
	}
	else 
	{
		if(t->data<=x)
			built1(t->right,x);
		else
			built1(t->left,x);
	}
}
void built2(T &t,int x)
{
	if(t==NULL)
	{
		t=new node;
		t->data=x;
		t->left=NULL;
		t->right=NULL;
	}
	else 
	{
		if(t->data<=x)
			built2(t->left,x);
		else
			built2(t->right,x);
	}
}
bool judge(T t)
{
	if(t)
	{
		int x=q3.front();
		q3.pop();
		if(x!=t->data)
			return 0;
		if(!judge(t->left))
			return 0;
		if(!judge(t->right))
			return 0;
	}
	return 1;
}
bool work()
{
	T t1=NULL,t2=NULL;
	while(!q1.empty())
	{
		int x=q1.front();
		q1.pop();
		built1(t1,x);
	}
	if(judge(t1))
	{
		result=t1;
		return 1;
	}
	q3=q2;
	while(!q2.empty())
	{
		int x=q2.front();
		q2.pop();
		built2(t2,x);
	}
	if(judge(t2))
	{
		result=t2;
		return 1;
	}
	return 0;
}
int cot=0;
void out(T t)
{
	if(t!=NULL)
	{	
		out(t->left);
		out(t->right);
		if(!cot)
			cout<<t->data;
		else
			cout<<' '<<t->data;	
		cot++;
	}
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		q1.push(x);
	}
	q3=q2=q1;
	result=new node;
	if(work())
	{
		cout<<"YES"<<endl;
		out(result);
	}
	else 
		cout<<"NO"<<endl;
}

标签:node,right,return,int,二叉,L2,004,NULL,left
From: https://www.cnblogs.com/jinshuli/p/18582576

相关文章

  • html2canvas 解决某些站点截图空白问题
    业务场景介绍  点击浏览器右上角已安装的chrome插件图标,这个时候会出现一个界面,我们称这个界面为popup,界面上有个"从页面获取产品信息"按钮,单机它会对当前标签页面内容进行截图,最后将截图的图片转成base64发送至xx接口部分核心代码解读:截取当前可视区域的图片,为了能够截图......
  • 博主自留二叉树万字长文—>涵盖名词辨析 + 树的两种表示方法 + 所有特殊二叉树 + 图解
    玩转二叉树(概念+图解+例题代码详解)一、树的概念我们知道在计算机什么是树吗?是二月春风似剪刀吗?哈哈哈哈哈哈显然不是我们看下面这张图,可以观察到树的一些特征1、树的特征(1)树是非线性的数据结构,是递归定义的(连通性)(2)子树之间不能有任何交集(无环性)(3)一颗N......
  • 二叉树の节点x的双亲节点
    算法思想:通过一个栈来辅助非递归地遍历二叉树。先向左遍历二叉树,将经过的节点依次入栈,并标记其tag为0(表示左孩子未遍历完),直到找到目标节点或者左子树为空。若找到目标节点,就输出栈顶节点的数据作为父节点并返回。若未找到且栈顶节点的右子树已遍历(tag为1),则弹出栈顶节点。若栈......
  • 数据结构(7)—二叉树_堆专题
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、二叉树概念二、堆的插入与删除1.插入-Up向上调整2.删除-Down向下调整堆排序前言堆(Heap)是一种特殊的树形数据结构,通常用于实现优先队列。堆可以是二叉堆,也可以推广到k元堆,但最常见......
  • MPHY0041 Machine Learning in Medical Imaging
    AssessedCourseworkTrackingSheetModuleCode:MPHY0041ModuleTitle:MachineLearninginMedicalImagingateHandedout:Friday,October25th2024StudentID(NotName)SubmissionInstruction:Beforethesubmissiondeadline,youshoulddigitallysubmi......
  • PROG2004 Object Oriented Programming
    AssessmentBriefPROG2004ObjectOrientedProgramming(Assessment1)TitleAssessment1TypeProgrammingDeadline4December11:59AMWeighting20%AcademicIntegrityContractcheatingandtheuseofGenAI,suchasChatGPT,inthisassignmentarestrictlyproh......
  • L2-015 互评成绩
    目录一、问题描述二、问题分析 三、源码解答四、时空复杂度分析五、参考资料一、问题描述学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编......
  • 完全二叉树的应用--堆
    目录1.堆的概念2.性质3.逻辑结构和物理结构(存储结构)4.堆的实现前提5.堆的实现思考:插入数据之前,得保证之前的数据是一个堆。为什么要这样?思考:为什么先改变child的值,先改parent的值不可以么? 5.2向下调整建堆思考:为什么先动parent,后动child?1.堆的概念如果有一个......
  • 代码随想录算法训练营第十四天 | 226.翻转二叉树、 101. 对称二叉树、104.二叉树的最
    文档讲解:代码随想录视频讲解:代码随想录状态:完成4道题226.翻转二叉树整体思路:交换每一个节点的左右孩子思考:使用哪种遍历方式?建议使用前序或后序遍历(中序遍历比较绕)​前序遍历#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,va......
  • 数据结构第一弹-二叉树
    大家好,今天和大家一起分享一下数据结构中的二叉树~二叉树是一种非常基础且重要的非线性数据结构,广泛应用于各种算法和系统设计中。今天详细介绍二叉树的基本概念、性质以及操作方法,并特别展开讨论一种特殊的二叉树——二叉搜索树(BinarySearchTree,BST)一、二叉树概述二......