实现原理
要用顺序存储的方式存储二叉树,前提为该二叉树中,结点顺序与完全二叉树结点顺序一致。
代码
#include <iostream>
#include <math.h>
#define MaxSize 100
using namespace std;
typedef int ElemType;
typedef struct TreeNode{
ElemType value;
bool isEmpty;//结点是否为空
}TreeNode;
int main(){
TreeNode t[MaxSize];
for(int i=0;i<MaxSize;i++){
t[i].isEmpty=true;
}
int n,m;
printf("请输入该二叉树有几层:");
scanf("%d",&n);
int size = pow(2,n)-1;
for(int i=1;i<=size;i++){
scanf("%d",&m);
if(m==0)continue;//表示该节点为空
else{
t[i].value=m;
t[i].isEmpty=false;
}
}
for(int i=1;i<=size;i++){
if(!t[i].isEmpty){
if(!t[2*i].isEmpty){
printf("%d结点的左孩子为%d ",t[i].value,t[2*i].value);
}else{
printf("%d结点没有左孩子 ",t[i].value);
}
if(!t[2*i+1].isEmpty){
printf("%d结点的右孩子为%d\n",t[i].value,t[2*i+1].value);
}else{
printf("%d结点没有右孩子\n",t[i].value);
}
}
}
return 0;
}