题目描述:https://leetcode.cn/problems/binary-tree-longest-consecutive-sequence-ii/
从最后的节点往上记录每个节点的递增和递减序列。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct Node {
unsigned int inc;
unsigned int dec;
};
int max_length;
struct Node dfs(struct TreeNode *cur_node)
{
struct Node node;
struct Node left_node;
struct Node right_node;
node.inc = 0;
node.dec = 0;
if (cur_node->left != NULL) {
left_node = dfs(cur_node->left);
if (cur_node->val - cur_node->left->val == 1) {
node.dec = left_node.dec + 1;
} else if (cur_node->left->val - cur_node->val == 1) {
node.inc = left_node.inc + 1;
}
}
if (cur_node->right != NULL) {
right_node = dfs(cur_node->right);
if (cur_node->val - cur_node->right->val == 1) {
node.dec = fmax(right_node.dec + 1, node.dec);
} else if (cur_node->right->val - cur_node->val == 1) {
node.inc = fmax(right_node.inc + 1, node.inc);
}
}
max_length = (max_length > (node.dec + node.inc + 1) ? max_length : (node.dec + node.inc + 1));
return node;
}
int longestConsecutive(struct TreeNode* root){
struct Node node;
max_length = 0;
dfs(root);
return max_length;
}