298. Binary Tree Longest Consecutive Sequence

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.

這題是連續(xù)遞增序列就行,
solution_extra是考慮續(xù)遞遞增|續(xù)遞遞減的情況,
另外因為本題是parent-child,所以pre-order post-order都可以。

Solution:DFS

思路:dfs 并傳遞 當(dāng)前最大c_max_len_inc 和 上一個結(jié)點來做判斷從而更新當(dāng)前的c_max_len_inc,更新global result。

Time Complexity: O(N) Space Complexity: O(N) 遞歸緩存

Solution Code:
//parent2child連續(xù)遞增序列

class Solution {
    private int result;
    public int longestConsecutive(TreeNode root) {
        if(root == null) return 0;
        result = 1;
        dfsHelper(root, null, 1);
        return result;
    }
    
    private void dfsHelper(TreeNode node, TreeNode prev, int c_max_len_inc) {
        if(node == null) return;
        if(prev != null && node.val == prev.val + 1) {
            c_max_len_inc++;
            if(c_max_len_inc > result) result = c_max_len_inc;
        }
        else {
            c_max_len_inc = 1;
        }
        dfsHelper(node.left, node, c_max_len_inc);
        dfsHelper(node.right, node, c_max_len_inc);
    }
}

Extra: parent2child可以連續(xù)遞增|連續(xù)遞減序列

//傳遞也應(yīng)該寫成package比較clear
class Solution_extra {
    private int result;
    public int longestConsecutive(TreeNode root) {
        if(root == null) return 0;
        result = 1;
        dfsHelper(root, null, 1, 1);
        return result;
    }
    
    private void dfsHelper(TreeNode node, TreeNode prev, int c_max_len_inc, int c_max_len_dec) {
        if(node == null) return;
        if(prev != null && node.val == prev.val + 1) {
            c_max_len_inc++;
            c_max_len_dec = 1;
            if(c_max_len_inc > result) result = c_max_len_inc;
        }
        else if(prev != null && node.val == prev.val - 1) {
            c_max_len_dec++;
            c_max_len_inc = 1;
            if(c_max_len_dec > result) result = c_max_len_dec;
        }
        else {
            c_max_len_inc = 1;
            c_max_len_dec = 1;
        }
        dfsHelper(node.left, node, c_max_len_inc, c_max_len_dec);
        dfsHelper(node.right, node, c_max_len_inc, c_max_len_dec);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容