算法-二叉树:反转二叉树
思路解析:只要把每个节点的左右孩子反转一下就可以了,注意不要采用中序遍历,因为可能会把某些节点的左右孩子反转两次。以下方法采用前序遍历,方法一采用递归,方法二采用迭代。
//方法一:前序遍历递归实现
TreeNode* traversal(TreeNode* root){
if(root == NULL) return root;
swap(root->left,root->right);
traversal(root->left);
traversal(root->right);
return root;
}
//方法二:前序遍历迭代实现
TreeNode* traversal(TreeNode* root){
if(root == NULL) return root;
stack<TreeNode*> 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;
}
//方法三:层序遍历迭代实现
TreeNode* traversal(TreeNode* root){
if(root == NULL) return root;
queue<TreeNode*> que;
que.push(root);
while (!que.empty()) {
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;
}