浏览 2097 次
锁定老帖子 主题:二叉树节点的最大距离
精华帖 (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); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |