二叉树的表达
相关题目请搜索ALDS1_7_B:Binary Tree
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int parent, left, right;
};
node T[100];
int deep(int i){
if(T[i].parent==-1) return 1;
return deep(T[i].parent)+1;
}
int height(int i){
int h1 = 0, h2 = 0;
if(T[i].left != -1)
h1 = height(T[i].left) + 1;
if(T[i].right != -1)
h2 = height(T[i].right) + 1;
return h1>h2? h1: h2;
}
void print(int i){
//子节点数deg, 深度dep, 高度h;
int deg = 0;
printf("序号:%3d 父亲节点:%3d 左孩子:%3d 右兄弟:%3d " , i, T[i].parent, T[i].left, T[i].right );
if(T[i].left != -1) ++deg;
if(T[i].right != -1) ++deg;
printf("子节点的个数:%3d ",deg);
printf("深度:%3d",deep(i));
printf("高度:%3d\n",height(i));
}
int main(){
int n, v, l, r, root=0;
cin>>n;
for(int i=0; i<100; i++) T[i].parent = -1;//将节点都标记为-1;
for(int i=0; i<n; i++){
cin>>v>>l>>r;
T[v].left = l;
T[v].right = r;
T[T[v].left].parent = v;
T[T[v].right].parent = v;
}
for(int i=0; i<n; i++) if(T[i].parent == -1) root = i;
for(int i=0; i<n; i++) print(i);
return 0;
}