问题描述:
二叉树问题。比如节点是ABCDE编号是01234,给出每个左右子树的编号。求最大叶子间距。样例输入:
输入1(如下左图):3
1 2
-1 -1
-1 -1
输出1:2
输入2(如下右图):6
1 -1
2 3
4 -1
-1 5
-1 -1
-1 -1
输出2:4
#include<iostream>
using namespace std;
const int maxn = 11000;
struct node {
int left;
int right;
}Node[maxn];
int maxd = -1;
int Maxdistance(int root) { //计算根结点的高度(左右子树高度+1)并计算最大叶子间距(左右子树高度和)
if (root == -1)
return -1;
int lefth = Maxdistance(Node[root].left) + 1;
int righth = Maxdistance(Node[root].right) + 1;
if (lefth + righth > maxd)
maxd = lefth + righth;
return lefth > righth ? lefth : righth;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> Node[i].left >> Node[i].right;
Maxdistance(0);
cout << maxd;
system("pause");
return 0;
}