目录
- 题目
- 题解:后序遍历
题目
- 给定一个二叉树的 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); // 从根节点开始进行DFSreturn res; // 返回计算出的最大同值路径长度
};