leetcode-对称二叉树-35

题目要求
  给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

思路
  如果树为空,则对称,如果树只有一个根节点,则对称。如果左节点和对应的右节点均为空,那么是对称的,排除掉均为空,只要他两个节点有一个不为空,那么就不是对称的。或者如果左右的节点的值不一样,那么树也不对称。然后分别对树的左子树和右子树进行递归。

图解
在这里插入图片描述

代码实现

bool dfs(struct TreeNode* left, struct TreeNode* right)
{
	if (left == NULL && right == NULL)
	{
		return true;
	}

	if (left == NULL || right == NULL)
	{
		return false;
	}

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

	return dfs(left->left, right->right) && dfs(left->right, right->left);
}

bool isSymmetric(struct TreeNode* root){
	if (root == NULL || (root->left == NULL && root->right == NULL))
	{
		return true;
	}
	return dfs(root->left, root->right);
}

猜你喜欢

转载自blog.csdn.net/weixin_43580319/article/details/114866997