题意描述:
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
方法一:递归法
递归法三部曲:确定递归函数的参数和返回值;确定终止条件;确定每一次递归的逻辑。
C++代码如下:
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;
}
};
方法二:统一迭代法
C++代码如下:
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
stack<TreeNode*> st;
if(root != NULL){
st.push(root);
}
while(!st.empty()){
TreeNode* node = st.top();
if(node != NULL){
st.pop();
if(node->right){
st.push(node->right);
}
if(node->left){
st.push(node->left);
}
st.push(node);
st.push(NULL);
}
else{
st.pop();
node = st.top();
st.pop();
swap(node->left, node->right);
}
}
return root;
}
};
方法三:层序遍历法
C++代码如下:
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
queue<TreeNode*> que;
if(root != NULL){
que.push(root);
}
while(!que.empty()){
int size = que.size();
for(int i = 0; i < size; i++){
TreeNode* node = que.front();
que.pop();
swap(node->left, node->right);
if(node->left){
que.push(node->left);
}
if(node->right){
que.push(node->right);
}
}
}
return root;
}
};