Leetcode101. 对称二叉树(C语言)
数据结构-树:算法与数据结构参考
题目:
给定一个二叉树,检查它是否是镜像对称的。例:
输入: [1,2,2,3,4,4,3]
输出:true
思路:
递归,由于只有根和左右子树完全对称,不能直接递归,所以要考虑构造一个判断两个树对称的函数。注意考虑到所有特殊情况
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isTSymmetric(struct TreeNode* s,struct TreeNode* t){ //判断两子树对称
if(!s && !t) return true; //两个树均为空
if(!s || !t) return false; //其中一个树为空
if(s->val != t->val) return false; //两个树根节点值不同
return isTSymmetric(s->left,t->right) && isTSymmetric(s->right,t->left);
//判断左右子树是否镜像对称
}
bool isSymmetric(struct TreeNode* root){
if(!root) return true;
return isTSymmetric(root->left,root->right);
//由于每次递归开始就判断root是否存在,故不会有空指针报错的情况
}