用C++语言编写数据结构树的问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 10:01:49
核心:二叉树的顺序存储结构

题目:已知用户将一棵完全二叉树的n个结点(数据类型是整型)以自顶向下、从左到右顺序输入到一个一维数组中:
(1)编写算法 FindRelation (int i) 输出下标为 i 的结点的父结点和所有子女结点(如果有的话).

(2)打印这棵二叉树的所有节点:先打印二叉树的根、再打印左子
树、最后打印右子树.

要求:
(1)二叉树的结点数据需要用户输入,用户先输入有多少个结点,然后输入各个结点的数据,用-1表示某结点为空。
(2)主要函数需要给出完整注释。
(3)调试平台VC6.0。
用负一表示某结点为空

#include"stdio.h"
int n,tree[100];
void creat()//创建二叉树
{
int i=0,j;
for(i=0;i<100;i++)
tree[i]=-1;
printf("input the num of nodes\n");
scanf("%d",&n);//输入节点个数(包括空节点)
tree[0]=j=n;
printf("input the value of nodes(the null node is -1)\n");
i=0;
while(j--)//循环输入节点值
{
i++;
scanf("%d",&tree[i]);
}
}

int findreational(int i)//找第i节点的父节点、孩子节点
{
if(i<=0||i>n)
{
printf("\n下标越界\n");
return 0;
}
if(tree[i/2]==-1)//父节点
printf("没有父节点\n");
else printf("父节点:%d\n",tree[i/2]);

if(tree[2*i]==-1)//左孩子节点
printf("没有左孩子\n");
else printf("左孩子:%d\n",tree[2*i]);

if(tree[2*i+1]==-1)//右孩子节点
printf("没有右孩子\n");
else printf("右孩子:%d\n&quo