226.翻转二叉树
文章解说:https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html
视频解说:https://www.bilibili.com/video/BV1sP4y1f7q7/?spm_id_from=333.788&vd_source=e70917aa6392827d1ccc8d85e19e8375
题目链接:https://leetcode.cn/problems/invert-binary-tree/description/
实现情况:
递归是什么什么顺序遍历呢?
前序和后续是最直接的
前序:
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
- * right(right) {}
- * };
- */
- class Solution {
- public:
- TreeNode* invertTree(TreeNode* root) {
- if (root == NULL)
- return root;
- swap(root->left, root->right); // 中
- invertTree(root->left); // 左
- invertTree(root->right); // 右
- return root;
- }
- };
复制代码
后续
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
- * right(right) {}
- * };
- */
- class Solution {
- public:
- TreeNode* invertTree(TreeNode* root) {
- if (root == NULL)
- return root;
-
- invertTree(root->left); // 左
- invertTree(root->right); // 右
- swap(root->left, root->right); // 中
- return root;
- }
- };
复制代码 中序不能直接全部通过,为什么?

下一次就是到遍历右孩子,发现这个是前想处理过的!
所以现在照旧须要处理左孩子
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
- * right(right) {}
- * };
- */
- class Solution {
- public:
- TreeNode* invertTree(TreeNode* root) {
- if (root == NULL)
- return root;
- invertTree(root->left); // 左
- swap(root->left, root->right); // 中
- invertTree(root->left); // 左(之前的右)
- return root;
- }
- };
复制代码 101. 对称二叉树
文章解说:https://programmercarl.com/0101.%E5%AF%B9%E7%A7%B0%E4%BA%8C%E5%8F%89%E6%A0%91.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频解说:https://www.bilibili.com/video/BV1ue4y1Y7Mf/?spm_id_from=333.788&vd_source=e70917aa6392827d1ccc8d85e19e8375
题目链接:https://leetcode.cn/problems/symmetric-tree/description/
实现情况:
左孩子的左孩子要和右孩子的右孩子比
左孩子的右孩子要和右孩子的左孩子比
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
- * right(right) {}
- * };
- */
- class Solution {
- public:
- bool compare(TreeNode* left, TreeNode* right) {
- // 首先排除空节点的情况
- if (left == NULL && right != NULL)
- return false;
- else if (left != NULL && right == NULL)
- return false;
- else if (left == NULL && right == NULL)
- return true;
- else if (left->val != right->val)
- return false;
- bool outside = compare(left->left, right->right);
- bool inside = compare(left->right, right->left);
- bool isSame = outside && inside;
- return isSame;
- }
- bool isSymmetric(TreeNode* root) {
- if (root == NULL)
- return true;
- return compare(root->left, root->right);
- }
- };
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |