立志用最少的代码做最高效的表达


笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字满足优先队列(不妨设为最小堆)的顺序要求,即该结点的K2值比其子树中所有结点的K2值小。给定一棵二叉树,请判断该树是否笛卡尔树。

输入格式:
输入首先给出正整数N(≤1000),为树中结点的个数。随后N行,每行给出一个结点的信息,包括:结点的K1值、K2值、左孩子结点编号、右孩子结点编号。设结点从0~(N-1)顺序编号。若某结点不存在孩子结点,则该位置给出−1。

输出格式:
输出YES如果该树是一棵笛卡尔树;否则输出NO。

输入样例1:
6
8 27 5 1
9 40 -1 -1
10 20 0 3
12 21 -1 4
15 22 -1 -1
5 35 -1 -1
输出样例1:
YES

输入样例2:
6
8 27 5 1
9 40 -1 -1
10 20 0 3
12 11 -1 4
15 22 -1 -1
50 35 -1 -1
输出样例2:
NO


分别判断是否为小根堆和二叉平衡树即可。
判断小根堆:是否是一个递增的序列
判断二叉平衡树:中序序列是否为一个递增的序列。


#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;int n;
struct node{int k1, k2;int left, right;
}nod[1010];
int vis[1010];          //找根节点 //判断是否为二叉搜索树:判断其中序序列是否为递增。
vector<int>in;
void isBst(int root) {if(nod[root].left != -1) isBst(nod[root].left);in.push_back(nod[root].k1);if(nod[root].right != -1) isBst(nod[root].right);
}
bool isBST(int root) {isBst(root);for(int i = 0; i < n-1; i++) if(in[i] > in[i+1]) return false;return true;
}int isMinHeap(int root) {if(root == -1) return 1;if(nod[root].left != -1) if(nod[nod[root].left].k2 < nod[root].k2 || !isMinHeap(nod[root].left)) return 0;if(nod[root].right != -1) if(nod[nod[root].right].k2 < nod[root].k2 || !isMinHeap(nod[root].right)) return 0;return 1;
}int main() {cin >> n;for(int i = 0; i < n; i++) {cin >> nod[i].k1 >> nod[i].k2 >> nod[i].left >> nod[i].right;if(nod[i].left != -1) vis[nod[i].left] = 1;if(nod[i].right != -1) vis[nod[i].right] = 1;; }int root = 0;for(int i = 0; i < n; i++) if(vis[i] == 0) root = i;cout << ((isBST(root) && isMinHeap(root)) ? "YES\n" : "NO\n"); return 0;
}

耗时


笛卡尔树 (25 分)笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字相关推荐

  1. LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...

  2. 判断一棵树是否是二叉搜索树

    1.什么是二叉搜索树? 二叉搜索树:如果一棵树为空树,那么是二叉搜索树:如果左子树的所有节点都小于根节点,右子树所有节点都大于根节点,那么是二叉搜索树 2.那么怎么编码呢? 根据BST的定义,我们往往 ...

  3. l2-004 这是二叉搜索树吗?_LeetCode 例题精讲 | 11 二叉树转化为链表:二叉树遍历中的相邻结点...

    本期例题: LeetCode 98. Validate Binary Search Tree 验证二叉搜索树(Medium) LeetCode 426. Convert Binary Tree to ...

  4. 7-88 二叉搜索树的结构 (30 分)

    7-88 二叉搜索树的结构 (30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值 ...

  5. L3-016 二叉搜索树的结构 (30 分)-PAT 团体程序设计天梯赛 GPLT

    二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...

  6. 【CCCC】L3-016 二叉搜索树的结构 (30分),,手动建堆(二叉搜索树节点询问),map写法

    problem L3-016 二叉搜索树的结构 (30分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右 ...

  7. 7-3 二叉搜索树的结构 (30 分)

    二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...

  8. PAT甲级1064 Complete Binary Search Tree (30分):[C++题解]完全二叉搜索树BST

    文章目录 题目分析 题目链接 题目分析 思路: 第一步,构造含有n个结点的完全二叉树:第二步,将n个数值填入,使其满足二叉搜索树的性质. 对于第一步: 完全二叉树用一维数组可以存下,不过从根结点的下标 ...

  9. 二叉搜索树(BST)?平衡二叉树(AVL)?

    二叉搜索树:中序遍历序列是有序的. 二叉查找树,也称有序二叉树,是指一棵空树或者具有以下性质的二叉树: 左子节点的值比父节点小 右子节点的值比父节点大 任意节点的左右字树也分别为二叉查找树 没有键值相 ...

  10. 二叉搜索树简介和部分题目

    引言 二叉搜索树是一个有序树,遵循以下规则: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉 ...

最新文章

  1. html中锚点的应用【本页面跳转】
  2. vue从后台获取新数据后刷新_vue项目中实现定时刷新页面(重新渲染数据实时更新)...
  3. 华为的全闪存存储发展历程
  4. Android移动开发之【Android实战项目】DAY2-使用Fragment实现底部菜单栏
  5. php并发访问排队_PHP高并发处理方案
  6. 互联网控制报文协议(ICMP)
  7. 关于HTML使用ComDlg ActiveX 无法弹出相应对话框的问题1
  8. 如何使用busybox编译和生成最简linux根文件系统(rootfs)
  9. 内核移植出现:Kernel panic - not syncing: No init found.
  10. JavaScript的gzip静态压缩方法记录
  11. 【浙江大学PAT真题练习乙级】1005 继续(3n+1)猜想 (25分) 真题解析
  12. url重写(urlrewrite.xml)
  13. Playmaker节点工具使用(三)—扩展playmaker
  14. 海康摄像头RTSP视频流-Web端人脸识别-ffmpeg+websocket+jsmpeg
  15. oneapi安装CMAQ
  16. 运动会分数统计系统(数据结构)C++
  17. 说说table下面定位层级的问题
  18. Mac快速创建文件、文件夹
  19. python自动读取短信_自动化测试-自动获取手机短信验证码
  20. HDLBits练习汇总-14-时序逻辑设计测试--状态机(二)

热门文章

  1. Java类加载器(二)——自定义类加载器
  2. 高并发服务遇 redis 瓶颈引发的事故
  3. 【从上云到创新,视频云的新技术与新场景】
  4. FFmpeg深度学习模块的历史、现状和计划
  5. JVM之类加载器ClassLoader
  6. 轻松 Flutter 入门,秒变大前端
  7. 「递归」第2集 | 变得了魔术,解得了高数,这届鹅厂程序员有点酷
  8. 阿里云全球首次互联网8K直播背后的技术解读
  9. MySQL 索引的问题
  10. mybatis实现CRUD(不使用DAO)