刷题日记 - 687 最长同值路径
LeetCode 687. 最长同值路径
Category | Difficulty | Likes | Dislikes |
---|---|---|---|
algorithms | Medium (48.06%) | 805 | - |
Tags
tree | recursion
Companies
题目:
给定一个二叉树的 root
,返回最长的路径的长度 ,这个路径中的每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
两个节点之间的路径长度由它们之间的边数表示。
plaintext
输入:root = [5,4,5,1,1,5] |
plaintext
输入:root = [1,4,5,4,4,5] |
提示:
- 树的节点数的范围是 [0, 104]
- -1000 <= Node.val <= 1000
- 树的深度将不超过 1000
思路
recursion
递归问题,找最长同值路径。从根节点开始,分别访问左右子树,如果左右子树的值和根节点的值相同,那么路径长度 + 1, 否则置为 0. 最后返回左右子树的最长同值路径.
c++
1 | /* |
首先看题所给 TreeNode
二叉树的结构,每个节点有一个 val
值,以及左右子节点。并含有三种构造函数
定义一个 longest
变量,用于存储最长同值路径.
定义一个 ArrowLength
递归函数,用于计算从当前节点开始的最长同值路径。如果当前节点为空,返回 0. 计算左右子树的最长同值路径,并且判断左右子节点是否和当前节点的值相同,如果相同,路径长度 + 1. 最后返回左右子树的最长同值路径。最后返回 longest
变量.
值得注意的是 , 在计算 longest
时,可能包含当前节点以及从左右子节点开始的最长同值路径,所以需要取最大值.
longest = std::max(longest, left_length + right_length);
测试用例
C++:
评论
TwikooLivere