一個樹爲對稱的僅當兩棵子樹互爲鏡像,即要滿足:
1.子樹根節點值相等
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:
bool DFS(TreeNode*root1,TreeNode* root2)
{
if(!root1&&!root2)
return true;
if(!root1||!root2||root1->val!=root2->val)
return false;
return DFS(root1->left,root2->right)&&DFS(root1->right,root2->left);
}
bool isSymmetric(TreeNode* root) {
return DFS(root,root);
}
};
迭代:
/**
* 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:
queue<TreeNode*>q;
bool check(TreeNode* node1,TreeNode* node2)
{
// if(node1==NULL)return true;
q.push(node1);
q.push(node2);
while(!q.empty())
{
TreeNode* u=q.front();
q.pop();
TreeNode* v=q.front();
q.pop();
if(!u&&!v)continue;
if(!u||!v||u->val!=v->val)
return false;
q.push(u->left);
q.push(v->right);
q.push(u->right);
q.push(v->left);
}
return true;
}
bool isSymmetric(TreeNode* root) {
return check(root,root);
}
};