对称的二叉树
程序员文章站
2022-05-06 22:45:41
...
题目描述:
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
题目解析:
思路:从根节点开始,判断它的左子树和右子树是否相等,它们的值是否相等。再递归的判断左子树的左子树和右子树的右子树是否相等,左子树的右子树和右子树的左子树是否相等。
AC代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
//递归版
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot == NULL)
return true;
return IsCommTree(pRoot->left,pRoot->right);
}
bool IsCommTree(TreeNode* left,TreeNode*right)
{
if(left == NULL && right == NULL)
return true;
if(left == NULL || right == NULL)
return false;
if(left->val != right->val)
return false;
return IsCommTree(left->left,right->right)
&& IsCommTree(left->right,right->left);
}
};
//非递归版:利用队列
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot == NULL)
return true;
queue<TreeNode*> q1,q2;
TreeNode *left,*right;
q1.push(pRoot);
q2.push(pRoot);
while(!q1.empty() && !q2.empty())
{
left = q1.front();
q1.pop();
right =q2.front();
q2.pop();
if(left == NULL && right == NULL)
continue;
if(left == NULL || right == NULL)
return false;
if(left->val != right->val)
return false;
q1.push(left->left);
q2.push(right->right);
q1.push(left->right);
q2.push(right->left);
}
return true;
}
};
(*^▽^*)
上一篇: [leetcode]5354. 通知所有员工所需的时间
下一篇: 二叉树的镜像(Java)