「递归逻辑实现」求一棵树中的最远距离

/*************************************************************************
	> File Name: LongestDistance.cpp
	> Author: Shaojie Kang
	> Mail: kangshaojie@ict.ac.cn 
	> Created Time: 2015年09月12日 星期六 11时11分40秒 
    > Problem:
        求一棵树中的最远距离
 ************************************************************************/

#include<iostream>
using namespace std;

struct TreeNode 
{
    TreeNode *left;
    TreeNode *right;
};

struct Result 
{
    int maxDepth;
    int maxDistance;
    Result(){}
    Result(int depth, int distance): maxDepth(depth), maxDistance(distance){}
};

Result GetLongestDistance(TreeNode *root)
{
    if(!root)
        return Result(-1, 0);
    Result result;
    Result leftResult = GetLongestDistance(root->left);
    Result rightResult = GetLongestDistance(root->right);
    result.maxDepth = max(leftResult.maxDepth, rightResult.maxDepth) + 1;
    result.maxDistance = max(max(leftResult.maxDistance, rightResult.maxDistance), leftResult.maxDepth + rightResult.maxDepth + 2);
    return result;
}

分析递归问题主要思路是:1. 先弄清楚递归的顺序。在递归的实现中,往往需要假设后续的调用已经完成,在此基础上,才实现递归的逻辑。在该题中,假设已经把后面的长度计算出来了,然后继续考虑后面的逻辑;2. 分析清楚递归体的逻辑,然后写出来。比如在上面的问题中,递归体的逻辑就是如何计算两边的距离。3. 考虑清楚递归退出的边界条件。也就是说,哪些地方应该写return.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值