对一个树的最长路径,进行以下分析:
1.左子节点的最长路径。
2.右子节点的最长路径。
3.左子节点的深度加上右子节点的深度。
数据结构及代码如下:
typedef struct node
{
int data;
struct node *lchild;
struct node *rchild;
}BTnode;//二叉树
int height(BTnode*h)//求以h为根节点的树的高度
{
int lchildh, rchildh;
if (h == NULL)
return 0;
else
{
lchildh = height(h->lchild);
rchildh = height(h->rchild);
return (lchildh > rchildh) ? (lchildh + 1) : (rchildh + 1);
}
}
int findmaxlength(BTnode*h)//求最大路径长度
{
int length1, length2;
length1 = findmaxlength(h->lchild);
length2 = findmaxlength(h->rchild);
int max;
if (h == NULL)
return 0;
else if (length1 < length2)
max = length2;
else
max = length1;
int sum = height(h->lchild) + height(h->rchild);
if (max < sum)
max = sum;
return sum;
}