298. Binary Tree Longest Consecutive Sequence

来源:互联网 发布:中国高铁在欧洲 知乎 编辑:程序博客网 时间:2024/05/05 22:52

Problem

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.


Solution

从上到下DFS到达某个节点(curNode)时,要想知道当前以它为结束的最长序列长度(curLen)时,

1. 需要知道它的父节点的值(preVal)和以它父节点为结尾的最大长度(preLen)。这样就是需要两个variable  preLen 和 preVal传值到当前函数。

2. 因为是从上到下DFS,除了知道以当前节点为结束点的最大长度(curLen)之外,还需要知道它的左右子树的最大长度。

比较三个值的最大值就是结果。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {    int helper(TreeNode* root, int preVal, int preLen){        if(!root) return preLen;                int curLen = root->val == preVal + 1 ? preLen + 1 : 1;                return max(curLen, max( helper(root->left, root->val, curLen), helper(root->right, root->val, curLen)));            }public:    int longestConsecutive(TreeNode* root) {        if(!root) return 0;                return helper(root, 0, root->val - 1);    }};



0 0