题目:剑指 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); } };
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。