【二叉树6】寻找二叉树中任意节点最远的距离

来源:互联网 发布:mac关不了机 编辑:程序博客网 时间:2024/05/21 14:05

【问题】

距离定义为两个节点中间的节点数目,也就是从一个节点到另一个节点所经过的节点数目(包括自身)。

由分治法的思想,我们可以想到 最远距离叶子节点只能出现在

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;}




原创粉丝点击