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

【问题】

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

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

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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值