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

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

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

树上最远距离练习

从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。给定一个二叉树的头结点root,请...
  • njudongchen
  • njudongchen
  • 2017年03月01日 15:23
  • 305

HDU 2196 Computer(求树上每个节点到其它点的最远距离)

解题思路: 求出树的直径的两个端点,则树上每个节点到其他点的最远距离一定是到这两个端点的距离中最长的那一个。 #include #include #include #include #in...
  • u013967323
  • u013967323
  • 2015年07月19日 11:33
  • 670

在二叉树中,距离最远的两个节点的距离

在二叉树中,找到距离最远的两个节点的距离 在二叉树中,找到距离最远的两个节点的距离。在上面的二叉树中,最远的节点的距离是:4(路径是2-3-13-5-2)。 解决思路:递归。最远的两个节点,...
  • jiyanfeng1
  • jiyanfeng1
  • 2012年09月06日 14:11
  • 5624

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 思路:首先任意一次dfs求出树上最长直径的一个端点End,然后以该端点为起点再次dfs求出另一...
  • zjsyhjh
  • zjsyhjh
  • 2014年05月26日 18:06
  • 537

二叉树系列——二叉树的最大距离(即相距最远的两个叶子节点,编程之美,百度面试题)

来自于编程之美3.8。 题目:如果我们把二叉树看做图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 如下图所示...
  • liuyi1207164339
  • liuyi1207164339
  • 2016年03月15日 21:23
  • 4477

HDU 2196 Computer (树形DP 求树上每个点能到达的最远距离)

题目链接:题目传送门 题意:求树上每个点的最远距离是多少 思路: 对一棵树的一个结点求他的最远距离只有两种情况,要么往他的儿子结点一路走到叶子结点,要么向他的父节点往走,然后在往下一...
  • qq_36782366
  • qq_36782366
  • 2018年01月16日 23:00
  • 24

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

计算一个二叉树的最大距离有两个情况: 情况1: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。 情况2: 路径不穿过根节点,而是左子树或右子树的最大距离路径,取其大者。 ...
  • qq_33417547
  • qq_33417547
  • 2016年12月01日 16:47
  • 1249

java 求二叉树中节点的最大距离.

如果我们把二叉树看成一个图,   父子节点之间的连线看成是双向的,   我们姑且定义"距离"为两节点之间边的个数。   写一个程序,   求一棵二叉树中相距最远的两个节点之间的距离 ...
  • stonetudou
  • stonetudou
  • 2012年10月14日 23:31
  • 1644

[编程之美]求二叉树中节点的最大距离

问题定义 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 书上的解法 ...
  • lalor
  • lalor
  • 2012年06月02日 21:37
  • 8801

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

数据结构与算法分析笔记与总结(java实现)--二叉树9:树上最远距离练习题
  • qq_27703417
  • qq_27703417
  • 2017年02月15日 17:35
  • 339
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【刷题之路】二叉树上最远距离
举报原因:
原因补充:

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