编程之美 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; }