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