题目链接:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
我的想法:
遍历节点,将遇到的节点左右互换
我的代码:
个人比较喜欢用层次遍历,感觉层次遍历更容易理解
- /**
- * 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;
- std::queue
que; - que.push(root);
- while(!que.empty())
- {
- TreeNode* cur = que.front();
- que.pop();
- TreeNode* tem = cur->left;
- cur->left = cur->right;
- cur->right = tem;
- if(cur->left) que.push(cur->left);
- if(cur->right) que.push(cur->right);
- }
- return root;
- }
- };
先序:
- class Solution {
- public:
- TreeNode* invertTree(TreeNode* root) {
- if (root == NULL) return root;
- stack
st; - st.push(root);
- while(!st.empty()) {
- TreeNode* node = st.top(); // 中
- st.pop();
- swap(node->left, node->right);
- if(node->right) st.push(node->right); // 右
- if(node->left) st.push(node->left); // 左
- }
- return root;
- }
- };
递归:
- 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;
- }
- };