【刷题之路】二叉树上最远距离

原创 2016年06月01日 10:26:39

从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。

最大距离不外乎两种情况

1、左子树或者右子树特别庞大,最大距离出现在左子树或右子树两个节点之间;

2、左右两子树节点数量大致平衡,则最大距离横跨左右子树,这种情况下必然是离头结点的左右两个子节点最远的节点之间的距离

遍历时不断返回两个参数,第一个是左右子树中节点的最大距离,第二个是左右子树中某个孩子节点距离当前头结点的最大距离,并根据这种返回值来最终确定最大距离

class LongestDistance {
public:
    int findLongest(TreeNode* root) {
        // write code here
        vector<int> temp;
        temp=backtree(root);
        return temp[0];
    }
    vector<int> backtree(TreeNode* root){
        vector<int> res(2,0);   //存储两个返回值的数组
        if(root==NULL) return res;
        int temp;
        vector<int> ltemp,rtemp;  //存储上一层的返回值
        ltemp=backtree(root->left);  //后序遍历
        rtemp=backtree(root->right);
        res[1]=max(ltemp[1],rtemp[1])+1; //res[1]是存储以当前节点为头结点,距离左右子树最左或最右孩子节点的最大距离
        temp=max(ltemp[0],rtemp[0]); //上一层的左右子树的res[0]即为以上一层节点为头结点的距离最大值
        res[0]=max(temp,ltemp[1]+rtemp[1]+1);//对以当前节点为头结点的二叉树节点比较,是左子树或者右子树上的节点距离最大值更大,还是左右最远节点的距离更大,取两者较大值作为以当前节点为头结点的二叉树中节点之间的最大距离。这里说明一点,temp数值是完全继承上一层的递归,是因为本层的左子树或者右子树的最大值本身就是上一层直接返回的最大值res[0],并不因为多了一层而有改变,但是左右最远节点的值因为上了一层需要多+1
        return res;
    }
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

二叉树9:树上最远距离练习题

二叉树9:树上最远距离练习题

数据结构与算法分析笔记与总结(java实现)--二叉树9:树上最远距离练习题

数据结构与算法分析笔记与总结(java实现)--二叉树9:树上最远距离练习题

hdu 2196 Computer 求树上每个节点到其他节点的最远距离

Problem Description A school bought the first computer some time ago(so this computer's id is 1)....

二叉树结点最远距离

寻找二叉树中相隔距离最远的结点
  • gkk000
  • gkk000
  • 2017年07月27日 13:35
  • 61

二叉树的两节点的最远距离

笔试GD公司时,遇到这个编程题,也是最后一道编程题,无奈时间不够,仓促写了个大概。在此总结一下 求解一个二叉树两节点的最远距离,基本分三种情况考虑: 情况1: 显然距离最远的...

二叉树最远距离问题

【题目】 从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。 给定一个二叉树的头...

北邮OJ 102. 最远距离 北邮2012网研院复试上机题

102. 最远距离 时间限制 1000 ms     内存限制 65536 KB     题目描述 正义的伙伴褋祈和葬仪社的机器人Fuyuneru正在被邪恶的GHQ部队追杀。眼看着快要逃不掉...

poj2187-Beauty Contest 求凸包最远距离(旋转卡壳算法模板题)

Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 37768  ...

凸包-卡壳算法求最远距离

  • 2017年04月01日 12:44
  • 1KB
  • 下载

poj 2187【凸包求最远距离】

#include #include #include #include #include #include #include #include #include #include #include #...
  • leolin_
  • leolin_
  • 2011年07月21日 22:15
  • 313
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【刷题之路】二叉树上最远距离
举报原因:
原因补充:

(最多只允许输入30个字)