运用递归的思想来求解二叉树的深度,用数组顺序存储二叉树。left[i]表示编号为i的根结点的左子树的编号, right[i]表示编号为i的根结点的右子树的编号。
#include <stdio.h>
#define N 10
int Left[1005], Right[1005];
int caldeep( int i )//返回的是根结点序号为i的子树的高度
{
if( Left[i] == -1 && Right[i] == -1 )
return 1;
int dleft;//左子树的高度
if( Left[i] == -1 )
dleft = 0;
else
dleft = caldeep( Left[i] );
int dright;//右子树的高度
if( Right[i] == -1 )
dright = 0;
else
dright = caldeep( Right[i] );
return (dleft>dright) ? dleft+1:dright+1;
}
int main(int argc, char *argv[])
{
int n;
cin >> n;
for( int i = 1; i <= n; i++ )
scanf("%d %d", &Left[i], &Right[i] );
cout << caldeep(1) << endl;
return 0;
}