根据序列{8,12,4,6,10,2,14}建立一棵二叉排序树.输出该二叉树。。。。。。
该二叉排序树
8
/ \
4 12
\ / \
6 10 14
/ \ \ / \
5 7 11 13 15
二叉排序树就是中序遍历之后是有序的;
构造二叉排序树步骤如下;
插入法构造
第二个结点 4 比 6 来的小 所以插入在 6 的左子树;
第三个结点 8 比 6 来的大 所以插入在 6 的右子树;
第四个结点 5 比6 来得小 先进入左子树然后跟 4比较,
5 比4 大 所以插入在 4 的右子树;
以此类推 将要插入的结点先跟根结点比较, 比根结点大进入右子树 反之进入 左子树;
在跟进入的 左子树(右子树)的结点比较 方法同上;
直到没有结点了 在插入; 你给的排序最后的二叉排序树如下;
中序遍历结果是 : 3 4 5 6 7 8 9 ;
先序遍历结果是 : 6 4 3 5 8 7 9 ;
实现创建、中序遍历、查找,但是输出二叉树没有实现,在C语言不好用,百度了一下
http://blog.csdn.net/copica/article/details/39291141
这篇文章输出很好看,可以参考一下。
#include<stdio.h>
#include<stdlib.h>
//二叉查找树结点描述
typedef struct node
{
int key; //关键字
struct node * left; //左孩子指针
struct node * right; //右孩子指针
}treeNode,*PNode;
//往二叉查找树中插入结点
//插入的话,可能要改变根结点的地址,所以传的是二级指针
void inseart(PNode * root,int key)
{
//初始化插入结点
PNode p=(PNode)malloc(sizeof(node));
p->key=key;
p->left=p->right=NULL;
//空树时,直接作为根结点
if((*root)==NULL){
*root=p;
return;
}
//插入到当前结点(*root)的左孩子
if((*root)->left == NULL && (*root)->key > key){
(*root)->left=p;
return;
}
//插入到当前结点(*root)的右孩子
if((*root)->right == NULL && (*root)->key < key){
(*root)->right=p;
return;
}
if((*root)->key > key)
inseart(&(*root)->left,key);
else if((*root)->key < key)
inseart(&(*root)->right,key);
else
return;
}
//查找元素,找到返回关键字的结点指针,没找到返回NULL
PNode search(PNode root,int key)
{
if(root == NULL)
return NULL;
if(key > root->key) //查找右子树
return search(root->right,key);
else if(key < root->key) //查找左子树
return search(root->left,key);
else
return root;
}
//创建一棵二叉查找树
void create(PNode* root,int *keyArray,int length)
{
int i;
//逐个结点插入二叉树中
for(i=0;i<length;i++)
inseart(root,keyArray[i]);
}
//输出树
void print(PNode root )
{
}
//中序遍历遍历
void InOrder(PNode root)
{
if(root != NULL){
InOrder(root->left);
printf("%d ",root->key);
InOrder(root->right);
}
}
int main(void)
{
PNode root=NULL;
int nodeArray[7]={8,12,4,6,10,2,14};
create(&root,nodeArray,7);
printf("这颗树是
:");
print(root);
printf("中序遍历:");
InOrder(root);
printf("
查找:");
if(search(root,11) == NULL )
printf("没有找到
");
else
printf("成功找到%d
",search(root,11)->key);
if(search(root,6) == NULL )
printf("没有找到
");
else
printf("成功找到%d
",search(root,6)->key);
return 0;
}
找规律,填空!4,9,8,18,12,27,( ),( )
16、36。解题:奇位数序列:4、8、12,每两个数字之间差4,所以下一个奇位数字是12+4=16。偶位数序列:9、18、27,每两个数字之间差9,所以下一个奇位数字是27+9=36。也可以将偶数序列看成是9的倍数关系,得到的结果相同。
写出在excel中a1~a10填充序列2,4,6,8,10,12,14,16,18,20的方法
先在a1-a3中输入2、4、6,选中a1-a3,按住a3右下角的+,向下拖动,电脑自动识别序列性质并填充。完成。
c语言设计,已知序列1,2,3,5,8,..求第20项的值
如果是用C++实现,用控制次数的循环累加即可做出。include <stdio.h> int main(){ int a[21], i;a[0] = 1, a[1] = 1;for (i = 2; i <= 20; ++i){ a[i] = a[i-1]+a[i-2];} printf ("%d\\n", a[20]);return 0;} 或:int array[100]={1,1};\/\/斐波那契数列前...
数据序列(12,13,6,5,8,7,20,3,9)只能是下列排序算法中的哪个1趟排序后...
A.选择排序 可以根据几个算法的不同特点,得到排序后的结果 。可以采用排除法:1,堆排序:建堆后,明显不是大根堆,这个可以排除 12 13 6 5 8 7 20 7 9 2,冒泡排序: 两两交换 一趟排序后,开始或结尾,会有一个是最大或最小。本题没有出现符合的元素,这个也可以排除。3...
1,3,2,6,4,9,8,12,16的规律是什么?
简单得直接观察是不能发现什么规律的,但是将数字分为奇偶项来看:奇数项:1、2、4、8、16 偶数项:3、6、9、12 可以分析得到:奇数项依次是2的0次方,2的1次方,2的2次方,2的三次方,2的四次方。接下来的奇数项为2的五次方,为32。偶数项:3,6,9。偶数项依次是3的一倍,3的两倍,3的...
数据结构题 已知序列(10,18,4,3,6,12,1,9,8),请用快速排序写出每一趟...
3),8,(9),10,12,(18,18)1,(3,4,6),8,9,10,12,18,(18)1,3,(4,6),8,9,10,12,18,18 1,3, 4,6,8,9,10,12,18,18 以上为快速排序的分区处理,选择一个数10,第一次吧比10小的全部移到左子区,比10大的移到右子区 第二次是比教8和12的大小的 第三第四依次类推 ...
数据序列 2 1 4 9 8 10 6 20 只可能是下列哪一种排序排2趟后的结果...
快速算法基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。根据这个思想,2 1 4 比 10 6 20 小,即:快速排序法 你这个题...
为什么6和8的倍数是24?
6和8是24的倍数,是因为24是6和8的公倍数,又因为6和8没有其他大于1的公共因子,所以24是它们的最小公倍数。最小公倍数是指若干个正整数公有的倍数中,最小的一个公倍数。求最小公倍数的方法,即先分解整数的质因数,然后将各种因数的最高幂次根据乘法原理相乘起来,得到这些数的最小公倍数...
根据样本数据3,5,12,10,8,22计算的中位数是?
3,5,12,10,8,22按顺序排列是3、5、8、10、12、22,因个数和是偶数,故中位数为序列中间的两数平均值:(8+10)\/2=9 中位数是9
一年级找规律填一填()()8()6()?
然后,我们观察偶数位,数字是:()8()6(),这个序列的偶数位数字是递增的,并且每次递增2,因此下一个偶数位数字应该是10。所以,完整的数字序列应该是:8()10()6()4()。现在,我们需要填写缺失的数字。根据规律,下一个数字应该是偶数位上的数字加2,即10+2=12。所以,缺失的数字应该是12。...
夹娴三七: 实现创建、中序遍历、查找,但是输出二叉树没有实现,在C语言不好用,百度了一下 http://blog.csdn.net/copica/article/details/39291141 这篇文章输出很好看,可以参考一下. #include#include //二叉查找树结点描述 typedef struct node { int key...
青冈县18390362724: 已知序列{8,4,6,7,12,5,10,14,13,11,15}构造一棵二叉排序树 - ?
夹娴三七: 该二叉排序树 8 / \4 12 \ / \ 6 10 14 / \ \ / \ 5 7 11 13 15
青冈县18390362724: 已知序列{10,18,4,3,6,12,1,9,15,8},请给出采用归并排序法对该序列作升序排序时的每一趟的结果.(用数据结构编程序) - ?
夹娴三七: 源码: #include#include #define MAXSIZE 20 typedef struct{ int r[MAXSIZE+1]; int length; }Sqlist; typedef int RcdType; void InsertSort(Sqlist &L)//直接插入排序 { int i,j; for(i=2;i<=L.length;i++) if(L.r[i]
青冈县18390362724: 编写程序实现对序列{2,3,4,1,5,7,6,8,10,9}}的排序,堆排序 - ?
夹娴三七: 只有C语言的……先输入10,再输入序列#include<stdio.h>#include<stdlib.h> struct heapstruct { int num[10000]; int len; int deep; }; void heap(heapstruct * x,int y,int z) //x为堆,y为以y为顶的堆,z为结束的点 { int i,j,k; i=y; k=x->num[i]; j=2*i; for(;j<=z;) ...
青冈县18390362724: 3/2 1/2 1/4 3/20 1/10 找规律 下个数字是什么 答案是1/14 但是规律是什么呢 - ?
夹娴三七: 这个很简单,上述数字依次转化就是 3/2 3/6 3/12 3/20 3/30 这个序列是分子不变,分母依次加4,6,8,10下一个就是加12,也就是3/(30+12)=3/42=1/14.
青冈县18390362724: 序列 1 2 3 4 5 6 ······ n 对应的数 1 3 6 10 ? 21······? - ?
夹娴三七: ?=15. 规律是 1+2=3; 3+3=6; 6+4=10; 10+5=15; 15+6=21; ........ 以此类推
青冈县18390362724: 有如下序列:12,6,20,18,34,10,请写出用选择排序法对该序列进行排序的过程 - ?
夹娴三七:莫非是指“简单选择排序”,这货每次从头至尾扫描序列,选出最小的一个记录和第一个交换,接着从剩下的选出最小一个记录和第二个交换,最...
青冈县18390362724: 234669找规律!接下来的后三位应该是什么?求解答 - ?
夹娴三七: 2、3、4、6、6、9、(8 )( 12)(10 ) 6个数分三组,第一个规律是:第一组2和3相差1,第二组4和6相差2,第三组6和9相差3;第二个规律:三组的第一个数分别是2、4、6,分别相差2. 有什么不明白可以继续问,随时在线等. 如果我的回答对你有帮助,请及时选为满意答案,谢谢~~
青冈县18390362724: 找规律10.10.12.8.14.6.().().().() - ?
夹娴三七: 16,4,18,2.奇数序列的规律:10、12、14、16、18后一个数是在前一个数上加2.偶数序列的规律:10、8、6、4、2后一个数是在前一个数上减2.
青冈县18390362724: 1,2,2,4,3,6,1,8,2,1,0,3,12,…,100观察数列的规律数列中有多少个2?数列中所有数的和是多少? - ?
夹娴三七:[答案] 2,4,6,8,10,12,...,100插入1,2,3,1,2,3,... 100/2=50;50/3=16+2/3 1,2,3,序列中有16+1=17个2 2,4,6,...,100序列中有个位有10个2,10位有5个2 ,共有15个2 所以一共有17+15=32个2 数字和=(2+4+6+8)*10+1+2+3+...+9+1+(1+2+3)*16+1+2=200+45+1+...