内容来自代码随想录
递归法
前序后序都可以
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == nullptr) return root;
swap(root->left,root->right);
invertTree(root->left);
invertTree(root->right);
return root;
}
};
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == nullptr) return root;
invertTree(root->left);
invertTree(root->right);
swap(root->left,root->right);
return root;
}
};
迭代法
在前序遍历的中部分多一步swap即可
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
stack<TreeNode*> st;
if(root == nullptr) return root;
TreeNode* cur = root;
st.push(cur);
while(!st.empty()){
TreeNode* node = st.top();
swap(node->left,node->right);
st.pop();
if(node->left) st.push(node->left);
if(node->right) st.push(node->right);
}
return root;
}
};