题目
给定一个二叉树,任意两个节点之间必然是有一条路径相通的,假定父节点和它的孩子节点的距离为单位1,求二叉树中相距最远的两个节点间的路径长度
分析
这是一个简单的动态规划问题,假设某个节点node,到它的最低叶节点的长度为len(node),所求的最长路径必然经过一个最高节点high_node,
则它到最低叶节点的长度为len(high_node)=max(len(high_node->left),len(high_node->right))+1,路径长度为sum=len(high_node->left)+len(high_node->right)+2;
代码
int MaxDistance(TreeNode* root,int* max)
2 {
3 if (root->pLeft==NULL&&root->pRight==NULL)
4 {
5 return 0;
6 }
7
8 int left_len=0,right_len=0;
9 if (root->pLeft!=NULL)
10 {
11 left_len=MaxDistance(root->pLeft,max)+1;
12 }
13 if (root->pRight!=NULL)
14 {
15 right_len=MaxDistance(root->pRight,max)+1;
16