LeetCode 549. 二叉树中最长的连续序列(树上DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 549. 二叉树中最长的连续序列(树上DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給定一個二叉樹,你需要找出二叉樹中最長的連續序列路徑的長度。
請注意,該路徑可以是遞增的或者是遞減。
例如,[1,2,3,4] 和 [4,3,2,1] 都被認為是合法的,而路徑 [1,2,4,3] 則不合法。
另一方面,路徑可以是 子-父-子 順序,并不一定是 父-子 順序。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/binary-tree-longest-consecutive-sequence-ii
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution {unordered_map<TreeNode*, vector<int>> dp; int maxlen = 0; public:int longestConsecutive(TreeNode* root) {dfs(root);return maxlen;}void dfs(TreeNode* root){if(!root) return;dfs(root->left);dfs(root->right);dp[root] = {1,1};//上升,下降,的最大長度if(root->left){if(root->val == root->left->val+1)//左側上升dp[root][0] = max(dp[root][0], dp[root->left][0]+1);else if(root->val == root->left->val-1)//左側下降dp[root][1] = max(dp[root][1], dp[root->left][1]+1);}if(root->right){if(root->val == root->right->val+1)//右側上升dp[root][0] = max(dp[root][0], dp[root->right][0]+1);else if(root->val == root->right->val-1)//右側下降dp[root][1] = max(dp[root][1], dp[root->right][1]+1);}maxlen = max(maxlen, dp[root][0]+dp[root][1]-1);//以該節點為升降的和,-1為該節點重復計算1次} };44 ms 29.2 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 549. 二叉树中最长的连续序列(树上DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode MySQL 1384.
- 下一篇: LeetCode 1088. 易混淆数