编程之美 3.8 求二叉树中节点最大距离

求节点最大距离,还是可以分解为求根节点最大距离和求它的左右子树的最大距离。

这一题中,由于只需要得到最大距离,所以在每一步中获得当前根节点的最大距离,并与全局变量MaxLen比较即可;貌似这题没有什么重叠子问题,直接递归即可。

正如书中所说,弄清楚递归的边界条件和每一步递归的顺序,对于递归过程做到心中有数,同时想好设置什么样的参数和返回值等以使得解决方法最简单,即可轻松实现这一类递归问题;

int MaxLen = 0;

int
MaxDistance(const Node *root){ if (root->lchild == NULL && root->rchild == NULL) return 0; int lh = 0, rh = 0; if (root->lchild) lh = MaxDistance(root->lchild) + 1; if (root->rchild) rh = MaxDistance(root->rchild) + 1; if ((lh + rh) > MaxLen) MaxLen = lh + rh; return lh > rh ? lh : rh; }

 

 

posted on 2012-12-24 00:21  小龙人2012  阅读(197)  评论(0编辑  收藏  举报

导航