一道关于二叉树的编程题

问题描述

一道关于二叉树的编程题

给出一组整数对 { (a[0], b[0]), (a[1], b[1]) ... (a[n-1], b[n-1]) },所有 a 值 和 b 值分别不重复(任意 i != j 满足 a[i] != a[j] 且 b[i] != b[j])。构造一棵 n 结点的二叉树,将这 n 个整数对分配到各个结点上。根和所有子树满足以下条件:
1) 所有结点的 a 值满足二叉查找树的顺序,即 left->a < root->a && root->a < right->a;
2) 所有结点的 b 值满足最大堆的顺序,即 root->b > left->b && root->b > right->b。

问题一:实现 build 函数,输入 n 个整数对,返回一棵构造好的二叉树。
struct pair_t {
int a, b;
};
struct node_t {
int a, b;
node_t left, *right;
};
node_t
build(pair_t* pair, int n);

例如,输入是 {(5, 8), (2, 10), (4, 3), (1, 5), (0, 2), (9, 1)},输出是下列二叉树:

提示:1) 构造出的二叉树的形态是存在且唯一的。 2) 想办法确定树根。

问题二:已知满足上述条件的二叉树,设计算法实现插入一个整对 (a, b),使新的二叉树仍满足上述条件。该算法比较复杂,候选人只需描述思路。

解决方案

是阿里的笔试题吗????

时间: 2024-12-31 08:59:54

一道关于二叉树的编程题的相关文章

ea编程-一道经典的EA编程题,你想挑战吗?

问题描述 一道经典的EA编程题,你想挑战吗? EA编程内容 品种:直盘外汇 时间周期:日线 入场信号做多: 条件1:当这个K线的收盘价高于左边第四根最高价时(以当下K线为参考从右往左数到第四根K线),收盘之后换线出现新K线. 分批建仓: A 换线之后立马开仓,建仓为0.2手. B,当换线后的K线回撤到前一根K线的1/2处,再次建仓为0.2手.(紧邻两根K线,以换线后这根K线为1,前一根K线为2,仅有当1这个K线回撤到2K线的1半才加仓,后市任何一根K线都不成立) C,当换线K线回撤到前一根K线的

一道关于getMethod的编程题,请高手赐招!

问题描述 在默认包下,有若干个独立的,已经编译好的".class"文件.这些文件的类有两个共同特点:它们的名字都是"D+数字"的形式,例如,D1,D123,等等.这些类都有一个类似的方法(name可变):public Integer name(Integer a, Integer b)其功能是将输入的a和b经过函数处理,得到另外一个Integer类型的数据后返回.你的任务是编写一个程序,该程序的功能是创建一个新的类Abc,实现它的静态方法是:public stati

树-一道编程题,用c++编程,求助

问题描述 一道编程题,用c++编程,求助 给定一颗无根树,假设它有n个节点,节点编号从1到n,求任意两点之间的距离之和,也就是求任意一点到其它点的距离之和,边长都为1.要求时间复杂度为O(n) 解决方案 先做一遍DFS求出所有节点到根节点的距离之和,然后可以发现,如果知道到一个点的距离之和,可以用O(1)求出所有节点到它相邻点的距离之和 解决方案二: /* ***********************************************Author :xdloveCreated T

鼠标点击坐标-一道C++编程题 绘制三角形 鼠标响应 填充

问题描述 一道C++编程题 绘制三角形 鼠标响应 填充 求大神帮忙!!拜托!写一部分也行 解决方案 除了中国移动4G,我不知道你图上说的是什么 解决方案二: 你自己提问都不愿意把问题说清楚,就这个马虎的态度,还指望有人愿意帮你? 解决方案三: 不是的,是我手机的问题 解决方案四: 这个网站好像放不出来

出现频率-一道C语言编程题,本人初学者,求大神解答

问题描述 一道C语言编程题,本人初学者,求大神解答 编写程序实现功能:数据文件story.txt是一篇英文小故事,请先统计其中26个字母的出现次数. 要求一:再根据用户要求,输出某个字母的出现次数,直到用户输入#为止. 要求二:请输出出现频率最高的三个字母和它们的出现次数. 解决方案 #include #include #include int main() { int alpha[26]={0}; //用于计数26个字母出现的次数 FILE *text; //FILE 指针 char ch;

刷华为上机题库时遇到的一道编程题

问题描述 刷华为上机题库时遇到的一道编程题 题目的要求是输入一个字符串,对字符串做如下变化1:按照A-Z的顺序条换顺序,不管字母的大小写.如Type变换为epTy2:同一个英文字母的大小写同时存在时,按照输入顺序排列.如输入:BabA?输出:aABb3:非英文字母的其它字符保持原来的位置.输入:By?e?输出:Be?y #include ""iostream""#include ""string""using namespac

新手求助-一道编程题,能给个代码学习下么?

问题描述 一道编程题,能给个代码学习下么? AVL树是指左右子树的高度差不超过1,现在有一颗n个节点的AVL树,问这样的树有多少种.比如n为10,答案为60种,时间效率要求尽量高. 解决方案 递归问题,有一颗n个节点的AVL树有多少种可以转化为问已经有了一个根节点,求n-1个节点的AVL树有多少种 如果只有一个节点,那么只有1种. 解决方案二: 我在你前一个问题中给出思路了,你看看能不能懂,自己先尝试写下代码,这样才能提高你的编码能力,我有空帮你写个代码. 这是道动态规划题, 挺好的我觉得.

内存管理-一道编程题用c语言实现这些功能时间有限1天时间求大神解答

问题描述 一道编程题用c语言实现这些功能时间有限1天时间求大神解答 有用户空间100kb,并规定作业的相应程序浇入内存连续区域,并不能被移动.作业与进程均采用sjf算法.输入为一组作业的进入时间,需要的内存容量(不超过100k)和运行时间. 要求: (1)按时间顺序给出每个作业的执行顺序,开始时间和结束时间,以及发生调度时内存各分区的状态: (2)计算这组作业的平均周转时间和平均带权周转时间: (3)实现作业一级调度和进程一级调度,包括调度算法和数据结构: (4)实现动态分区内存管理,包括内存分

欢聚时代笔试题,滴滴出行编程题

感谢赛码网,奇怪的A题设计,bat一轮大企业过去,没A上去几道. intel 笔试: 1.单链表逆置,双向链表删除 2.层次遍历二叉树 3.rand4()生成rand9() 4.非常多的各种指针操作. 面试:完全的问项目 1.stl boost c++中的智能指针,以及其实现原理? 2.b 树的插入 3.代码实现stack 的排序,只能用stack 的基本操作 乐港面试: 服务器实时排名?(和完美世界一个样子) 为啥下午5点review code 的问题. // testofrecursive.