论坛首页 编程语言技术论坛

二叉树节点的最大距离

浏览 2061 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-02  
求二叉树中节点的最大距离...

如果我们把二叉树看成一个图,
父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。

由题意,我们可以知道,两个节点的最大距离是他们各自到达最近公共父节点的距离和。所以我们可以递归的思路来解这道题。
首先,定义数据结构:
struct Node{
    struct Node *left,*right;
    int v;
}

求解思路是这样的,在求解经过当前节点的最长路径,实际就是求出他左子树的高度加上他友子树的高度。判断这个和是否比当前以求得的和大,更新之。
因为涉及到建树这一步,我就不用可执行代码实现了,一下是伪代码,有兴趣的同学可以自己实现:
int sum=0;
int solve(Node* root){
if(root==null)return 0;
int l=solve(root->left);
int r=solve(root->right);
if(sum<l+r)sum=r+l;
return max(r,l);
}
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics