最长同值路径

最长同值路径

题目力扣链接

题目描述

给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。

注意:两个节点之间的路径长度由它们之间的边数表示。

实例1:

输入:
实例1图示
输出 : 2

输入:

在这里插入图片描述
输出 : 2

题解:

看到二叉树的题,首先要想到递归。首先,要想得到等值路径,需要该节点的左孩子的等值路径和该节点右孩子的等值路径。若该节点的值和左右孩子的值相同的话,那么把左右子树等值路径相加,然后比较这次的等值路径和当前最大等值路径的大小,若比当前最大等值路径大,则更新。

/**
 * 
 * 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 max_path=0;
 * int path(TreeNode* t,int val)//      返回t的左子树和右子树路径长度(算当前节点)的最大值 
 * {    
 * 	if(t==NULL)    
 * 	{        
 *		return 0;    
 * 	}    
 *	int left=path(t->left,t->val);    //求左子树最长路径长度 
 *	int right=path(t->right,t->val);    //求右子树最长等值路径长度 
 * 	max_path=max(max_path,left+right);    //返回当前所要求的最长等值路径 
 * 	if(t->val==val) //如果是等值的话,返回t的左子树和右子树路径长度(算当前节点)的最大值 
 * 	{        
 *	     return max(left,right)+1;    //返回左子树和右子树路径长度(算当前节点)的最大值
 *	 }    
 *	 return 0;				//不是等值的直接返回0 
 * }    
 * int longestUnivaluePath(TreeNode* root) 
 * {        
 * 	if(root==NULL)    
 * 	{        
 * 		return 0;    
 *	}    
 * 	path(root,root->val);    
 * 	cout<<max_path<<endl;    
 *	return max_path;    
 *}
 * };

执行用时 :132 ms, 在所有 cpp 提交中击败了99.48% 的用户
内存消耗 :49.6 MB, 在所有 cpp 提交中击败了82.94%的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值