【LeetCode】最长同值路径 Java 题解
题目描述
给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
两个节点之间的路径长度 由它们之间的边数表示。
复制代码
思路分析
今天的算法题目是二叉树相关题目,题目要求我们计算出值相同的最长路径长度。分析题目,求最长路径长度,这里的路径可能是从根结点开始,也可能不从左右子树开始。而两个路径的长度是由他们的边决定的,所以最长同值路径长度必定为某一节点的左最长同值有向路径长度与右最长同值有向路径长度之和。
解决树的遍历题目,我们最常用的方法是 BFS(广度优先搜索)和 DFS(深度优先搜索)。这里,我们采用 DFS,DFS 简单理解就是每次都尝试向更深的节点走。在树的遍历中,DFS 首先完成递归中止条件,当 node 的值是 null 的时候,返回 0。如何判断是否同值呢?我们只需要将当前左子树的值和当前根结点的值比较即可,如果相同,则长度+1,右子树处理同理。这里需要注意的是,我们需要将左子树同值有向路径长度与右子树同值有向路径长度相加,才是当前的最长有向路径长度。动态更新 ans 即可。
具体实现代码如下,供参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n),空间复杂度是 O(1)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/6e7542ca7336f299521569d46】。文章转载请联系作者。
评论