题目描述:
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
示例1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例2:
输入:root = [1,2,2,null,3,null,3]
输出:false
限制:
0 <= 节点个数 <= 1000
代码:
/**
* 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 solve_duichen(TreeNode* root1,TreeNode* root2){
if(root1==nullptr&&root2==nullptr)return true;
if(root1==nullptr)return false;
if(root2==nullptr)return false;
if(root1->val!=root2->val)return false;
return solve_duichen(root1->left,root2->right)&&solve_duichen(root1->right,root2->left);
}
bool isSymmetric(TreeNode* root) {
if(root==nullptr)return true;
return solve_duichen(root->left,root->right);
}
};
分两步:
1.判断两个树是否对称相等:
若树root1和树root2均为空,对称相等;否则若root1或root2为空,不对称;若root1和root1都不为空,但值不相等,不对称;继续递归比较root1的左子树和root2的右子树,以及root1的右子树和root2的左子树是否对称。
2.对所给的树的根结点root进行对称判断:
判断其左子树和右子树是否对称,返回判断结果。
注意:
复杂的二叉树判断问题,分步骤求,先递归解决题目定义的问题如:对称,镜像…再调用上面的递归对所给的树root进行判断。