目录
题目:剑指 Offer 27. 二叉树的镜像 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
题目:剑指 Offer 28. 对称的二叉树 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
写在最后:
题目:剑指 Offer 27. 二叉树的镜像 - 力扣(Leetcode)
题目的接口:
/**
* 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:
TreeNode* mirrorTree(TreeNode* root) {
}
};
解题思路:
递归遍历二叉树每个节点的左右孩子,
然后自下而上依次交换左右孩子。
如果到空就返回。
代码:
/**
* 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:
TreeNode* mirrorTree(TreeNode* root) {
//遇到空返回
if(root == nullptr)
{
return nullptr;
}
//找左孩子
TreeNode* left = mirrorTree(root->left);
//找右孩子
TreeNode* right = mirrorTree(root->right);
//交换左右孩子
root->left = right;
root->right = left;
//返回交换后的根节点
return root;
}
};
过啦!!!
题目:剑指 Offer 28. 对称的二叉树 - 力扣(Leetcode)
题目的接口:
/**
* 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 isSymmetric(TreeNode* root) {
}
};
解题思路:
递归遍历二叉树,
如果二叉树为空,返回true,
我一开始是返回false,然后测试的时候,
测试用例返回的是true,
我就根据题意写代码了。
注意一下空指针的访问问题,
想个办法判断一下,
再比较是否镜像对称即可。
代码:
/**
* 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 is_Symmetric(TreeNode* left, TreeNode* right)
{
//如果左右孩子都为空,证明递归完了,返回true
if(left == nullptr && right == nullptr)
{
return true;
}
//如果孩子其中有一个为空,返回false(如果不提前判断,之后比较时会错误使用空指针)
if(!left || !right)
{
return false;
}
//比较是否镜像对称
if(left->val != right->val)
{
return false;
}
//递归搜索
return is_Symmetric(left->left, right->right) && is_Symmetric(right->left, left->right);
}
bool isSymmetric(TreeNode* root) {
//如果是空树,也是对称(测试用例告诉我的)
if(root == nullptr)
{
return true;
}
//递归搜索左右孩子
return is_Symmetric(root->left, root->right);
}
};
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。