• 【二叉树】最长同值路径


    题目描述

    给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。

    两个节点之间的路径长度 由它们之间的边数表示。

    示例 1:

    输入:root = [5,4,5,1,1,null,5]
    输出:2

    解题思路

    这道题我想是用DFS解决,但是做了一会儿发现没有想清楚递归公式,最终还是查看了其他人的解法。

    整个递归思路如下:

    • 找到(左子树+当前节点)的长度,设置为countLeft;
    • 找到(右子树+当前节点)的长度,设置为countRight;
    • max = Math.max(max, countLeft+countRight);
    • 返回Math.max(countLeft, countRight).

    图示如下:


    第一阶段

    拆分成左子树:

     那么左子树中没有一条边上的2个节点相等,返回0,max=0

    右子树:

     那么右子树中有一条边上的2个节点相等,返回1,max=1


    第二阶段

    根节点5,同左子树的根节点4比较,发现不相等,countLeft=0;

    根节点5,同右子树的根节点5比较,发现相等,由于右子树已经返回1,则countRight=2;

    最终计算max = Math.max(max, countLeft+countRight) = 2;  


    具体代码实现如下:

    1. import org.example.TreeNode;
    2. class Solution {
    3. int max = 0;
    4. public int longestUnivaluePath(TreeNode root) {
    5. dfs(root);
    6. return max;
    7. }
    8. private int dfs(TreeNode root) {
    9. if (root != null) {
    10. int left = dfs(root.left);
    11. int right = dfs(root.right);
    12. int countLeft = 0;
    13. if (root.left != null && root.left.val == root.val) {
    14. countLeft = left + 1;
    15. }
    16. int countRight = 0;
    17. if (root.right != null && root.right.val == root.val) {
    18. countRight = right + 1;
    19. }
    20. max = Math.max(max, countLeft + countRight);
    21. return Math.max(countLeft, countRight);
    22. } else {
    23. return 0;
    24. }
    25. }
    26. public static void main(String[] args) {
    27. TreeNode root = new TreeNode(4);
    28. root.left = new TreeNode(4);
    29. root.right = new TreeNode(4);
    30. root.left.left = new TreeNode(4);
    31. root.right.left = new TreeNode(4);
    32. Solution solution = new Solution();
    33. System.out.println(solution.longestUnivaluePath(root));
    34. }
    35. }

     总结

    这道题是中等难度,这道题使用dfs做是很高效的,代码复杂度也不高,主要困难点是找到规律能通过左右子树来计算满足条件的边数量。如果有更加高效、简洁的代码实现欢迎回复。

     

  • 相关阅读:
    (高频面试1)Redis缓存穿透、缓存击穿、缓存雪崩
    一个完备的手游地形实现方案
    CSS栅格布局(Grid)
    使用MySqlBulkLoader批量插入数据
    为网站设置欢迎页面和自定义网站的图标教程~
    【文末附gpt升级方案】数据虚拟化技术的优势
    【车载音视频电脑】嵌入式AI分析车载DVR,支持8路1080P
    linux多线程编程之pthread_join和pthread_once使用
    mysql 数据库 期末复习题库
    论文阅读 - Hidden messages: mapping nations’ media campaigns
  • 原文地址:https://blog.csdn.net/weiliuhong1/article/details/126671856