【问题】
距离定义为两个节点中间的节点数目,也就是从一个节点到另一个节点所经过的节点数目(包括自身)。
由分治法的思想,我们可以想到 最远距离叶子节点只能出现在
A. 出现在左子树
B. 出现在右子树
C. 两个节点分别位于左右子树
求max(A,B,C)
【举例】
一颗二叉树如下:
最长路径为:7
【代码】
函数findMaxHand中,首先获得该节点的左孩子与有孩子的高度,二者较大的那个+1得到以当前节点的为根节点的高度。
int findMaxHand(BTreeNode *root, int &maxPath) {
if (root == NULL)
return 0;
int maxleft = findMaxHand(root->leftchild,maxPath);
int maxright = findMaxHand(root->rightchild,maxPath);
if ((maxleft + maxright +1)>maxPath)
maxPath = maxleft + maxright +1;
if (maxleft > maxright)
return maxleft+1;
else
return maxright+1;
}
int findMaxPath(BTreeNode *root) {
int maxPath = 0;
findMaxHand(root, maxPath);
return maxPath;
}