题意
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1
/ \
2 2
\ \
3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
题意
给你一个二叉树,判断是否为对称树。
建议使用递归或者迭代。
首先要知道递归和迭代的区别:
- recursively 递归:重复调用函数自身。
- iteratively 迭代:函数A不停的调用函数B。
思路
所谓对称树就是:
- 左子树的左孩子==右子树的右孩子
- 左子树的右孩子==右子树的左孩子
Python语言
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def digui(self,p,q):
if p == None and q == None:
return True
elif p == None and q != None or p != None and q == None:
return False
elif p.val == q.val:
return self.digui(p.left,q.right) and self.digui(p.right,q.left)
else:
return False
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root == None:
return True
else:
return self.digui(root.left,root.right)
C++语言
/**
* 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:
/*
1.根节点为空,true
2.左子树的左孩子==右子树的右孩子
2.左子树的右孩子==右子树的左孩子
*/
bool digui(TreeNode* p, TreeNode* q)
{
//同为空则比较到了最后
if(p==NULL && q==NULL)
return true;
//其中一个为空
else if(p==NULL&&q!=NULL || p!=NULL&&q==NULL)
return false;
//都不为空,比较数值是否相同
else if(p->val == q->val)
return digui(p->left, q->right)&&digui(p->right, q->left);
else
return false;
}
bool isSymmetric(TreeNode* root)
{
if(root == NULL)
return true;
else
return digui(root->left, root->right);
}
};