题目(力扣):
观察题目,只需判断该二叉树是否对称。
判断二叉树是否对称,就可以换位去判断该二叉树的左子树和右子树是否对称。
这时就可以写一个辅助函数来方便判断。
该函数是判断两颗树是否镜像对称,这时就会发现,我们需要的这个函数和判断两棵树是否相等非常相似,只需改变一些条件,(判断树是否相等是左节点的值等于另一棵树左节点的值,右节点的值等于另一棵树右节点的值而镜像则是相反,即左节点的值等于另一棵树右节点的值,右节点的值等于另一棵树左节点的值)
判断两树是否相等:
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if (p == NULL && q == NULL)return true;else if (p == NULL || q == NULL)return false;else if (p->val != q->val)return false;elsereturn isSameTree(p->left, q->left)&& isSameTree(p->right, q->right);
}
而判断两树是否镜像对称:
只有这两处地方有改变。
其余地方一直相同。
剩余的isSymmetric函数中就是简单的判断了
完整代码:
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if (p == NULL && q == NULL)return true;else if (p == NULL || q == NULL)return false;else if (p->val != q->val)return false;elsereturn isSameTree(p->left, q->right)&& isSameTree(p->right, q->left);
}
bool isSymmetric(struct TreeNode* root) {if(!root)return true;if((!root->left && root->right) || (!root->right && root->left))return false;else if(root->left && root->right)return isSameTree(root->left,root->right);elsereturn true;
}
题目的提交: