- 结点的坐标规律
坐标(i) | 结点 |
---|---|
0 | a |
1 | b |
2 | c |
3 | d |
4 | e |
5 | f |
6 | g |
可得第i个的左子节点的坐标为(2i+1)
右子节点的坐标为(2i+2)
- 求深度
#include<stdio.h>
#include<math.h>
int main()
{
char tree[]={'a','b','c','d','e','f','g','h','i'};
int len=9;
int t=log(len)/log(2);
printf("%d",t+1);
return 0;
}
结果:
4
-
增删查改
删结点要从最后一个删,因为要满足完全二叉树定义。增的话,系统可能会报错,因为操作系统没有允许,但仍能增加。
#include<stdio.h>
int main()
{
char tree[]={'a','b','c','d','e','f','g','h','i'};
int len=9;
tree[9]='j';//增,这波叫强行拓荒
printf("%c",tree[9]);
printf("\n");
for(int x=2;x<9;x++)//删第三个
{
tree[x]=tree[x+1];
}
for(int y=0;y<9;y++)
{
printf("%c",tree[y]);
}
printf("\n");
for(int z=0;z<9;z++)//查e在第几个位置
{
if(tree[z]=='e')
{
printf("%d",z+1);
}
}
printf("\n");
for(int t=0;t<9;t++)//改第四个
{
if(t==3)
{
tree[t]='m';
}
}
for(int n=0;n<9;n++)
{
printf("%c",tree[n]);
}
return 0;
}
结果:
j
abdefghij
4
abdmfghij
- 判断是不是叶子结点
#include<stdio.h>
int main()
{
char tree[]={'a','b','c','d','e','f','g','h','i'};
int len=9;
int i;
scanf("%d",&i);
if(2*i+1>len)
{
printf("是叶子结点");
}
else
{
printf("不是叶子结点");
}
return 0;
}
运行结果:
4
不是叶子结点