二叉排序树的合并有三种方法

  1. 先存入数组,然后。。。。。
  2. 直接在第二个树上添加第一个数的元素,时间复杂度为O(NlogN)
  3. 就像是合并数组一样合并二叉排序树,分别扫描,时间复杂度极低。

第三种我写了一下,是错误的答案,实在想不出更好的方法。

网上还有按照方法1进行。。。

方法二可能更加正常一点,虽然时间复杂度比方法一大。。。

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
int data;
struct Node *lc, *rc;
}Node;
void Create(Node **N)
{
int t;
scanf("%d", &t);
if(t==-1)
{
(*N) = NULL;
return;
}
Node *s = (Node*)malloc(sizeof(Node));
s->data = t;
(*N) = s;
Create(&(s->lc));
Create(&(s->rc));
}
void Insert(Node*N,int x)
{
Node *p;
p = N;
Node *s = (Node*)malloc(sizeof(Node));
s->data = x;
s->lc = NULL;
s->rc = NULL;
while(1)
{
if(x > p->data)
{
if(!p->rc) {p->rc = s;return;}
else p = p->rc;
}
else if(x < p->data)
{
if(!p->lc) {p->lc = s; return;}
else p = p->lc;
}
else
{
free(s);
return;
} }
}
void DFS(Node *A, Node *B)
{
if(!B)
return;
DFS(A,B->lc);
Insert(A, B->data);
DFS(A, B->rc);
}
void Tran(Node *C)
{
if(!C) return;
Tran(C->lc);
printf("%d ", C->data);
Tran(C->rc);
}
int main()
{
Node *A, *B, *C;
Create(&A);
Create(&B);
DFS(A, B);
Tran(A); return 0;
}
/*
12 8 4 -1 -1 10 -1 -1 16 13 -1 -1 18 -1 -1
17 6 2 -1 -1 9 -1 -1 24 19 -1 -1 26 -1 -1 */

二叉排序树的合并(严3.98)--------西工大noj的更多相关文章

  1. K阶斐波那契数列--------西工大NOJ习题.10

    K阶斐波那契数列--------西工大NOJ习题.10 原创不易,转载请说明出处!!! 科普:k阶斐波那契数列的0到n-1项需要有初始值. 其中,0到n-2项初始化为0,第n-1项初始化为1. 在这道 ...

  2. 输出以二叉树表示的算术表达式(严6.51)--------西工大noj

    题解 这道题目说的很诡异,其实没有什么把括号补上....仅仅是先序读入,然后中序输出就行了 代码 #include <stdio.h> #include <stdlib.h> ...

  3. 建立二叉树的二叉链表(严6.65)--------西工大noj

    需要注意的点:在创建二叉树的函数中,如果len1==len2==0,一定要把(*T)置为NULL然后退出循环 #include <stdio.h> #include <stdlib. ...

  4. 建立二叉树的二叉链表存储结构(严6.70)--------西工大noj

    #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode ...

  5. 求广义表深度(严5.30)--------西工大noj

    #include <stdio.h> #include <stdlib.h> #include <string.h> typedef enum{ATOM, LIST ...

  6. 以十字链表为存储结构实现矩阵相加(严5.27)--------西工大noj

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef int ElemT ...

  7. 循环队列(严3.30)--------西工大NOJ习题.9

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct _Q ...

  8. 基于图的广度优先搜索策略(耿7.11)--------西工大noj.20

    目录 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ...

  9. 基于图的深度优先搜索策略(耿7.10)--------西工大noj

    ​ 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ...

随机推荐

  1. 巧用 Docker 快速部署 GPU 环境

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 在 Linux 服务器上使用 GPU 跑深度学习的模型很正常不过.如果我们想用 Docker 实现同样的需求,就需要做些额外 ...

  2. Vue报错: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'protocol')

    Vue报错: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'protocol') 报错信 ...

  3. 第一篇:实时网络日志分析器和交互式查看器--GoAccess安装

    介绍 GoAccess是一个开源的实时网络日志分析器和交互式查看器,可以在* nix 系统或通过浏览器的终端中运行. 它为需要动态可视化服务器报告的系统管理员提供快速且有价值的HTTP统计信息. 特征 ...

  4. 69. Sqrt(x) - LeetCode

    Question 69. Sqrt(x) Solution 题目大意: 求一个数的平方根 思路: 二分查找 Python实现: def sqrt(x): l = 0 r = x + 1 while l ...

  5. linux篇-rpm包安装mysql数据库

    3.1上传以下两个rpm包到服务器上 MySQL-server-5.6.27-1.el6.x86_64.rpm MySQL-client-5.6.27-1.el6.x86_64.rpm 3.2卸载一个 ...

  6. 今天才发现ThinkPad的触摸板简直好用!傻乎乎的自己

    最近经常看到这句话,天下武功,唯快不破. 今天才发现ThinkPad的触摸板简直好用! 今天才发现,傻乎乎的自己. 前一阵鼠标不好用了,没有滚轮,一直傻瓜式操作点击浏览器的滚动条... 遇到没有滚动条 ...

  7. MongoDB 各项命名规范

    每日一句 Progress is the result of a bunch of failures. 进步是不断失败的成果. 概述 MongoDB涉及到的一些比如集合啥的命令规范. 集合的命名规范 ...

  8. vue大型电商项目尚品汇(前台篇)day05

    紧急更新第二弹,然后就剩下最后一弹,也就是整个前台的项目 一.购物车 1.加入购物车(新知识点) 加入到购物车是需要接口操作的,因为我们需要将用户的加入到购物车的保存到服务器数据库,你的账号后面才会在 ...

  9. BitBlt()函数实现带数字百分比进度条控件、静态文本(STATIC)控件实现的位图进度条、自定义进度条控件实现七彩虹颜色带数字百分比

    Windows API BitBlt()函数实现带数字百分比进度条控件. 有两个例子:一用定时器实现,二用多线程实现. 带有详细注解. 此例是本人原创,绝对是网上稀缺资源(本源码用Windows AP ...

  10. 【clickhouse专栏】新建库角色用户初始化

    一.创建新的database clickhouse创建数据库的语法几乎和其他的关系型数据库是一样的,区别就是clickhouse存在集群cluster和库引擎engine的概念,可以根据需要进行指定. ...