题目描述:
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
思路:
递归;
代码如下:
C++:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int dfs(TreeNode* root,int val,int& res){
if(!root) return 0;
int l=dfs(root->left,root->val,res);
int r=dfs(root->right,root->val,res);
res=max(res,l+r);
return root->val==val?max(l,r)+1:0;
}
int longestUnivaluePath(TreeNode* root) {
if(!root) return 0;
int res=0;
dfs(root,root->val,res);
return res;
}
};
python:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.res=0
def longestUnivaluePath(self, root: TreeNode) -> int:
if not root:return 0
self.dfs(root,root.val)
return self.res
def dfs(self,node,val):
if not node:return 0
l=self.dfs(node.left,node.val)
r=self.dfs(node.right,node.val)
self.res=max(self.res,l+r)
if node.val==val:return max(l,r)+1
else:return 0