求出每个节点的高度(即该节点到子树最远叶节点的距离),最大距离的路径一定会经过某个子树的树根
在深度遍历时维持一个dis作为最大距离;
#include<iostream>
using namespace std;
using namespace std;
int dis = 0;
struct node
{
int longs;//最长节点
node* l;
node* r;
};
struct node
{
int longs;//最长节点
node* l;
node* r;
};
void find(node* root)
{
if (root == NULL)
{
root->longs = 0;
return;
}
else
{
find(root->l);
find(root->r);
int l = root->l->longs;
int r = root->r->longs;
dis = (dis > l + r + 2) ? dis : (l + r + 2);
root->longs = (l > r) ? (l + 1) : (r + 1);
}
{
if (root == NULL)
{
root->longs = 0;
return;
}
else
{
find(root->l);
find(root->r);
int l = root->l->longs;
int r = root->r->longs;
dis = (dis > l + r + 2) ? dis : (l + r + 2);
root->longs = (l > r) ? (l + 1) : (r + 1);
}
}