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

来源:互联网 发布:sql join 编辑:程序博客网 时间:2024/06/05 06:25
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,

求一棵二叉树中相距最远的两个节点之间的距离。


HANDWRITING:

int distance (node *root) {int lh, rh;if (root->m_pLeft == 0) lh = 0;else lh = distance(root->m_pLeft);if (root->m_pRight == 0) rh = 0;else rh = distance(root->m_pRight);return lh > rh ? lh + 1 : rh + 1;}


ANSWER FROM:http://blog.csdn.net/v_july_v/article/details/6870251
This is interesting... Also recursively, the longest distance between two nodes must be either from root to one leaf, or between two leafs. For the former case, it’s the tree height. For the latter case, it should be the sum of the heights of left and right subtrees of the two leaves’ most least ancestor.
The first case is also the sum the heights of subtrees, just the height + 0.

int maxDistance(Node * root) {  int depth;  return helper(root, depth);}int helper(Node * root, int &depth) {  if (root == NULL) {    depth = 0; return 0;  }  int ld, rd;  int maxleft = helper(root->left, ld);  int maxright = helper(root->right, rd);  depth = max(ld, rd)+1;  return max(maxleft, max(maxright, ld+rd));}

FROM:http://blog.csdn.net/v_july_v/article/details/6870251
原创粉丝点击