题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
leetcode对应题目:
总结:使用双队列的迭代写法。判断某两个结点A,B,看看A,B的值相等不?然后A的左孩子的值和B的右孩子?...类比。
递归终止条件的判断,要先看走到null结点没有,再进行别的判断。
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
if(!pRoot || !pRoot->left && !pRoot->right) return true;
queue<TreeNode*> p;p.push(pRoot->left);
queue<TreeNode*> q;q.push(pRoot->right);
while(!q.empty()&&!p.empty()){
TreeNode* node1 = p.front();p.pop();
TreeNode* node2 = q.front();q.pop();
if(!node1 && !node2) continue;
if(!node1 && node2 || node1 && !node2 || node1->val != node2->val)
return false;
p.push(node1->left);
p.push(node1->right);
q.push(node2->right);
q.push(node2->left);
}
return true;
}
};
递归的写法:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root) return true;
return isTreeSymmetric(root->left,root->right);
}
//isTreeSymmetric函数和isSameTree函数相同的思路
bool isTreeSymmetric(TreeNode* pNode1,TreeNode* pNode2){
if(!pNode1 && !pNode2) return true;
if(!pNode1 && pNode2 || pNode1 && !pNode2 || pNode1->val != pNode2->val ) return false;
return isTreeSymmetric(pNode1->left,pNode2->right)
&& isTreeSymmetric(pNode1->right,pNode2->left);
}
};