LintCode 595.Binary Tree Longest Consecutive Sequence

本文介绍了一种寻找二叉树中最长连续路径长度的方法。连续路径指从任意节点开始,沿着父子节点连接直到另一个节点的路径,且数值必须连续递增。通过递归辅助函数实现,返回最长连续序列的长度。

(先码,代码是看别人的,还有地方有点迷糊)

描述:

给一棵二叉树,找到最长连续路径的长度。
这条路径是指 任何的节点序列中的起始节点到树中的任一节点都必须遵循 父-子 联系。最长的连续路径必须是从父亲节点到孩子节点(不能逆序)。

样例:

例1:

输入:
   1
    \
     3
    / \
   2   4
        \
         5
输出:3
解释:
Longest consecutive sequence path is 3-4-5, so return 3.

例2:

输入:
   2
    \
     3
    / 
   2    
  / 
 1
输出:2
解释:
Longest consecutive sequence path is 2-3,not 3-2-1, so return 2.

代码: 

public:
    int longestConsecutive(TreeNode* root) {
        return helper(root, NULL, 0);
    }
    int helper(TreeNode *root, TreeNode *p, int res) {
        if (!root) return res;
        res = (p && root->val == p->val + 1) ? res + 1 : 1;
        return max(res, max(helper(root->left, root, res), helper(root->right, root, res)));
    }

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值