题目:

Given a binary tree, find the length of the longest consecutive sequence path.

The path refers to any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The longest consecutive path need to be from parent to child (cannot be the reverse).

For example,

   1
\
3
/ \
2 4
\
5

Longest consecutive sequence path is 3-4-5, so return 3.

   2
\
3
/
2
/
1

Longest consecutive sequence path is 2-3,not3-2-1, so return 2.

链接: http://leetcode.com/problems/binary-tree-longest-consecutive-sequence/

题解:

求二叉树中最长连续序列。 题目又比较长, 不过我们可以确定这个最长连续序列肯定是递增的,比如123,或者345。知道这点以后就可以用DFS遍历了。

Time Complexity - O(n),  Space Complexity - O(n)。

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private int max = 0;
public int longestConsecutive(TreeNode root) {
if(root == null) {
return max;
}
findLongestConsecutive(root, 0, root.val);
return max;
} private void findLongestConsecutive(TreeNode root, int curMax, int target) {
if(root == null) {
return;
}
if(root.val == target) {
curMax++;
} else {
curMax = 1;
}
max = Math.max(max, curMax);
findLongestConsecutive(root.left, curMax, root.val + 1);
findLongestConsecutive(root.right, curMax, root.val + 1);
}
}

二刷:

根据题目的意思,最长连续子序列必须是从root到leaf的方向。 比如 1->2,那么我们就返回长度2, 比如1->3->4->5,我们就返回3->4->5这个子序列的长度3。把树遍历一遍就可以得到结果了。

方法和一刷一样,构建一个辅助方法,形参是当前要处理的节点root,root父节点的值lastVal,以及当前的长度curLen。也要使用一个global variable maxLen来保存全局最大长度。也有使用stack来iterative遍历的做法。

Java:

Time Complexity - O(n),  Space Complexity - O(n)。

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private int maxLen = 0; public int longestConsecutive(TreeNode root) {
longestConsecutive(root, 0, 0);
return maxLen;
} private void longestConsecutive(TreeNode root, int lastVal, int curLen) {
if (root == null) return;
if (root.val != lastVal + 1) curLen = 1;
else curLen++;
maxLen = Math.max(maxLen, curLen);
longestConsecutive(root.left, root.val, curLen);
longestConsecutive(root.right, root.val, curLen);
}
}

Reference:

https://leetcode.com/discuss/68723/simple-recursive-dfs-without-global-variable

https://leetcode.com/discuss/66486/c-solution-in-4-lines

https://leetcode.com/discuss/66565/1ms-easy-understand-java-solution-just-traverse-the-tree-once

https://leetcode.com/discuss/68094/dont-understand-what-is-consecutive-sequence

https://leetcode.com/discuss/66646/two-simple-iterative-solutions-bfs-and-dfs

https://leetcode.com/discuss/66548/recursive-solution-bottom-iteration-solution-using-stack

https://leetcode.com/discuss/66584/easy-java-dfs-is-there-better-time-complexity-solution

298. Binary Tree Longest Consecutive Sequence的更多相关文章

  1. LeetCode 298. Binary Tree Longest Consecutive Sequence

    原题链接在这里:https://leetcode.com/problems/binary-tree-longest-consecutive-sequence/ 题目: Given a binary t ...

  2. [LeetCode] 298. Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

    Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...

  3. 298. Binary Tree Longest Consecutive Sequence最长连续序列

    [抄题]: Given a binary tree, find the length of the longest consecutive sequence path. The path refers ...

  4. [LC] 298. Binary Tree Longest Consecutive Sequence

    Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...

  5. [LeetCode] 549. Binary Tree Longest Consecutive Sequence II 二叉树最长连续序列之 II

    Given a binary tree, you need to find the length of Longest Consecutive Path in Binary Tree. Especia ...

  6. [LintCode] 619 Binary Tree Longest Consecutive Sequence III 二叉树最长连续序列 III

    Given a k-ary tree, find the length of the longest consecutive sequence path. The path could be star ...

  7. LeetCode Binary Tree Longest Consecutive Sequence

    原题链接在这里:https://leetcode.com/problems/binary-tree-longest-consecutive-sequence/ 题目: Given a binary t ...

  8. [Locked] Binary Tree Longest Consecutive Sequence

    Binary Tree Longest Consecutive Sequence Given a binary tree, find the length of the longest consecu ...

  9. [LeetCode] Binary Tree Longest Consecutive Sequence II 二叉树最长连续序列之二

    Given a binary tree, you need to find the length of Longest Consecutive Path in Binary Tree. Especia ...

随机推荐

  1. JS中的apply,call,bind深入理解

    在Javascript中,Function是一种对象.Function对象中的this指向决定于函数被调用的方式.使用apply,call 与 bind 均可以改变函数对象中this的指向,在说区别之 ...

  2. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  3. 用sql语句生成 数据字典

    SELECT 表名=case when a.colorder=1 then d.name else '' end, 表说明=case when a.colorder=1 then isnull(f.v ...

  4. MVC5 自定义表单错误信息

    1.

  5. 通过HTML5获取当前位置

    // 当前位置 function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPositi ...

  6. 通过Log4j的DEBUG级别来显示mybatis的sql语句

        为了更加方便调试sql语句,需要显示mybatis的sql语句.     网络上的一般方式都是通过log4j来实现,但是很多都有问题.      经过实验,以下代码能够保持正常:(只显示myb ...

  7. 在线编辑器 (UBB, FCK)

    这里主要说明一下:UBB UBB 使用类型HTML的语法.  UBB相对FCK的HTML方式, 安全性高. 用户不可以直接嵌入HTML代码.   UBB 在线编辑器(JS版): http://www. ...

  8. 遭遇Asp.Net长文件名下载的问题和解决办法

    在Asp.Net中写了一个附件上传和下载的程序,附件上传到数据库中,然后将附件的GUID保存起来,我们可以根据GUID来找到数据库中的附件,一般附件下载的代码是: <!--<br /> ...

  9. 用dedecms自定义表单创建简易自助预约系统

    建站往往需要根据客户的需求来增加相应的功能,比如预约.平时用比较多的是织梦系统,那么如何用dedecms自定义表单创建简易自助预约系统呢? 进入dedecms后台,左侧菜单中依次点击“核心” - 频道 ...

  10. JobClient学习------作业提交与初始化

    public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); ...