您的位置:首页 > 其它

101、Symmetric Tree

2015-12-08 11:10 344 查看
题目:

iven a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:
1
/ \
2   2
/ \ / \
3  4 4  3


But the following is not:

1
/ \
2   2
\   \
3    3


Note:

Bonus points if you could solve it both recursively and iteratively.
解题思路:
递归

c++版本:

class Solution {
public:
bool symmetric(TreeNode* node1,TreeNode* node2){
if(!node1)return !node2;
if(!node2)return !node1;
if(node1->val!=node2->val)return false;
return symmetric(node1->left,node2->right) && symmetric(node1->right,node2->left);
}
bool isSymmetric(TreeNode* root) {
if(!root)return true;
return symmetric(root->left,root->right);
}
};
python版本:

class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def symmetric(node1,node2):
if(node1==None):return node2==None
elif(node2==None):return node1==None
elif(node1.val!=node2.val):return False
return symmetric(node1.left,node2.right) and symmetric(node1.right,node2.left)
if(root==None):return True
return symmetric(root.left,root.right)


迭代版本:

<pre name="code" class="cpp">class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
queue<TreeNode*> q1, q2;
q1.push(root->left); q2.push(root->right);
while(!q1.empty() && !q2.empty())
{
TreeNode* node1=q1.front(); TreeNode* node2=q2.front();
q1.pop();q2.pop();
if(!node1 && !node2)
continue;
if(!node1 || !node2)
return false;
if(node1->val!=node2->val)
return false;
q1.push(node1->left);q1.push(node1->right);
q2.push(node2->right);q2.push(node2->left);
}
if(q1.empty() && q2.empty())
return true;
else
return false;
}
};



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: