687. 最长同值路径

687. 最长同值路径,第1张

687. 最长同值路径
class Solution 
{
public:
int res = 0;
	
	int dfs(TreeNode* cur)
	{
		if(cur == nullptr)
		{
			return 0;
		}
		
		int	leftNode = dfs(cur->left);//以 root的左子节点 为起点 的最长同值路径长度
		int	rightNode = dfs(cur->right); //以 root的右子节点 为起点 的最长同值路径长度
		
		if(cur->left != nullptr && cur->val == cur->left->val) // leftNode表示,以root节点为起点 向左节点延伸 的最长同值路径长度												
		{											// 如果root->left->val != root->val 那么一个点路径长是0
			++leftNode;
		}
		else
		{
			leftNode = 0;
		}
		
		if(cur->right != nullptr && cur->val == cur->right->val)// rightNode表示,以root节点为起点 向右节点延伸 的最长同值路径长度
		{
			++rightNode;
		}
		else
		{
			rightNode = 0;
		}

		res = max(res, leftNode + rightNode); // leftNode + rightNode就表示在以root为根节点的树上,经过root节点的最长同值路径的长度
		return max(leftNode, rightNode);//leftNode和rightNode中的最大值,表示以root节点为起点的最长同值路径长度
	}
    
	int longestUnivaluePath(TreeNode* root) 
    {
		dfs(root);
		return res;// +1 与 -1 抵消
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5634691.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存