【转载】求二叉树中节点的最大距离..

265 篇文章 1 订阅

求二叉树中节点的最大距离...
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
ANSWER:
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));
}

后记,其实以下几个题目有很大的相似性:

这一类题目在递归的时候要返回多个结果,对于C++这种语言都非常烦人。如果写非递归,就是按层遍历或者BFS,但是递归时候的多个结果需要新用一个list来存,必要时候还需要记一下爹是谁好累加回去,明天补一下codes

如果非要DFS的情况,写非递归的情况,就是用栈模拟递归,DFS肯定是先序。这部分总结参考: https://blog.csdn.net/taoqick/article/details/82495508, 先序非递归可以灵活应用,看栈里扔什么,https://blog.csdn.net/taoqick/article/details/12750031Flatten Binary Tree to Linked List 这题就玩的比较花,这个题的递归更难写,不信看代码/(ㄒoㄒ)/~~

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值