如何在百度做免费推广产品,网站建立好如何做seo,太仓市建设招标网站,北海市住建局官方网站最长同值路径 题目描述DFS 深度遍历代码演示 题目描述 难度 - 中等 LC - 687. 最长同值路径 给定一个二叉树的 root #xff0c;返回 最长的路径的长度 #xff0c;这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。 两个节点之间的路径长度 由它们之… 最长同值路径 题目描述DFS 深度遍历代码演示 题目描述 难度 - 中等 LC - 687. 最长同值路径 给定一个二叉树的 root 返回 最长的路径的长度 这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。 两个节点之间的路径长度 由它们之间的边数表示。 示例1 输入root [5,4,5,1,1,5] 输出2 示例2 输入root [1,4,5,4,4,5] 输出2 提示: 树的节点数的范围是 [0, 104] -1000 Node.val 1000 树的深度将不超过 1000 DFS 深度遍历 设计递归函数 int dfs(TreeNode root)含义为传入根节点 root返回以该节点为起点往下走同值路径所能经过的最大路径长度即不能同时往左右节点走同时使用全局变量 max 记录答案路径所能经过最大路径长度。 在递归函数内部先通过递归 root 的左右子节点拿到以 root.left 和 root.right 为起点的最大路径长度 l 和 r然后根据当前节点值和左右子节点值的相等关系来更新 ans同时用 cur 维护「以当前节点 root 为目标路径中深度最小位置最高节点时」所经过的最大路径长度。 代码演示
/*** 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 ans;public int longestUnivaluePath1(TreeNode root) {ans 0;dfs(root);return ans;}int dfs(TreeNode root){if(root null){return 0;}int left dfs(root.left);int right dfs(root.right);//left1 right1 来记录左右节点和头节点的连接情况int left1 0, right1 0;//如果左边节点和root 相等left1 1就连接起来了if(root.left ! null root.left.val root.val){left1 left 1;}//同上if(root.right ! null root.right.val root.val){right1 right 1;}//记录最大值如果左右节点都相等两个值相加ans Math.max(ans,left1 right1);return Math.max(left1,right1);}
}