兄弟们今天又来刷题了,题目:. - 力扣(LeetCode)
刚开始看到这个题其实就觉得和那个判断二叉树是否相等的题很相似,于是就照着那题的思路想,可是后来发现此题给的接口函数只有一个参数,没办法写,于是我们可以自己写一个接口函数来完成。
思路:我们可以将这棵树看成把根节点删除的左右两棵树,题目保证了一定会有一个节点,所以我们就直接从它的左右孩子下手直接将他的孩子传给我们的接口函数,然后开始递归调用,此处需要注意的是因为我们是用相等二叉树的思路,但此处是对称二叉树,所以在递归调用的时候当往下一层递归时左边的树传左孩子时右边的树应该传右孩子,传右孩子时右边的树应该传左孩子,因为我们要的是满足对称
递归的返回条件有三个:1.当子节点为空时,有两种情况,一是只有一个根节点时此树仍是对称返回true,
二是当左右两树分别访问完它们的左子树和右子树时,没有发现不相等返回true。
2.因为已经把两个子节点都为空排除了,所以接下来只用关心两树是否对称,当两棵树子节点一个为空一个不为空时两树不对称返回false。
3.最后一个返回条件就是两树节点都不为空时,则进行值的比较若不等则返回false。
最后加上递归语句左树调左(右)孩子右树调右(左)孩子,大功告成!
附上代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSY(struct TreeNode* Lroot,struct TreeNode* Rroot){
if(Lroot==NULL&&Rroot==NULL){
return true;
}
if(Lroot==NULL||Rroot==NULL){
return false;
}
if(Lroot->val!=Rroot->val){
return false;
}
return isSY(Lroot->left,Rroot->right)&&isSY(Lroot->right,Rroot->left);
}
bool isSymmetric(struct TreeNode* root) {
return isSY(root->left,root->right);
}
标签:Rroot,TreeNode,struct,Lroot,return,二叉树,对称,101,节点
From: https://blog.csdn.net/m0_74085682/article/details/137430829