leetcode-单值二叉树-30

题目要求
  如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。

思路
  第一种情况,树为空,那么肯定为单值二叉树。因为如果判断根节点的两个子节点相等并不能完全说明问题,并且会写的非常复杂,因此我们考虑第二种情况是排除掉不能满足单值的情况,第二种情况是左子树不满足情况的条件,第三种情况是右子树不满足情况的条件。总体思路上使用了分治的思想,并且在判断的时候先考虑了左子数和右子数的存不存在,存在之后才能判断相不相等,不存在就跳过了,这也刚好的解决了叶子节点没有子孙节点的边界处理问题。

图解
在这里插入图片描述

代码实现

bool isUnivalTree(struct TreeNode* root){
	if (root == NULL)
	{
		return true;
	}

	if (root->left && root->left->val != root->val)
	{
		return false;
	}

	if (root->right && root->right->val != root->val)
	{
		return false;
	}

	return isUnivalTree(root->left) && isUnivalTree(root->right);
}

猜你喜欢

转载自blog.csdn.net/weixin_43580319/article/details/114798706
今日推荐