687. 最长同值路径(中)

题目

  • 给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
    两个节点之间的路径长度 由它们之间的边数表示。

题解:后序遍历

  • 通过深度优先搜索后序遍历二叉树,计算并更新每个节点的同值路径长度,最终找出最长的同值路径。
var longestUnivaluePath = function(root) {
    let res = 0; // 用于存储最大同值路径的长度

    // 深度优先搜索(DFS)函数
    const dfs = (root) => {
        if (root == null) return 0; // 如果节点为空,返回0

        // 递归访问左子树和右子树
        const left = dfs(root.left); // 左子树的同值路径长度
        const right = dfs(root.right); // 右子树的同值路径长度

        let leftPath = 0, rightPath = 0; // 初始化左路径和右路径的长度

        // 如果左子节点的值与当前节点相同,更新左路径长度
        if (root.left && root.left.val == root.val) {
            leftPath = left + 1; // 加上当前边的长度
        }
        // 如果右子节点的值与当前节点相同,更新右路径长度
        if (root.right && root.right.val == root.val) {
            rightPath = right + 1; // 加上当前边的长度
        }

        // 更新最大同值路径的长度
        res = Math.max(res, leftPath + rightPath); // 左右路径相加为当前节点的同值路径

        // 返回当前节点的最长同值路径长度
        // 只返回较长的一边,因为路径只允许从一个方向延伸
        return Math.max(leftPath, rightPath);
    }

    dfs(root); // 从根节点开始进行DFS
    return res; // 返回计算出的最大同值路径长度
};
posted @   Frommoon  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示