leetcode 687. Longest Univalue Path | 687. 最长同值路径(树形dp)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 687. Longest Univalue Path | 687. 最长同值路径(树形dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
https://leetcode.com/problems/longest-univalue-path/
題解:樹形 dp 套路
實現1:帶有 Info 類的樹形 dp
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/ class Info {int depth;int val; }class Solution {int result;public int longestUnivaluePath(TreeNode root) {dfs(root);return result;}public Info dfs(TreeNode node) {if (node == null) return null;Info leftInfo = dfs(node.left);Info rightInfo = dfs(node.right);Info info = new Info();info.depth = 0;info.val = node.val;int length = 0;if (leftInfo != null && leftInfo.val == node.val) {length += leftInfo.depth + 1;info.depth = leftInfo.depth + 1;}if (rightInfo != null && rightInfo.val == node.val) {length += rightInfo.depth + 1;info.depth = Math.max(info.depth, rightInfo.depth + 1);}result = Math.max(result, length);return info;} }實現2:不帶 Info 類的樹形 dp
后來發現,Info.val 始終是 node.val,所以根本不用存 Info.val 字段,直接用 node.left.val, node.right.val 代替就可以。
然后,Info 類就只剩下一個字段了,一個字段還有啥用?直接用裸的 int 了。
于是,對上面的代碼進行了改造。改造后:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/ class Solution {int result;public int longestUnivaluePath(TreeNode root) {dfs(root);return result;}public int dfs(TreeNode node) {if (node == null) return -1;int leftDepth = dfs(node.left);int rightDepth = dfs(node.right);int depth = 0;int length = 0;if (leftDepth != -1 && node.left.val == node.val) {length += leftDepth + 1;depth = leftDepth + 1;}if (rightDepth != -1 && node.right.val == node.val) {length += rightDepth + 1;depth = Math.max(depth, rightDepth + 1);}result = Math.max(result, length);return depth;} }總結
以上是生活随笔為你收集整理的leetcode 687. Longest Univalue Path | 687. 最长同值路径(树形dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 239. Slidin
- 下一篇: leetcode 688. Knight