翻转二叉树,最好使用前后序遍历,只要掌握二叉树的遍历后,这个题目就不难了
下面用二叉树的前序递归、迭代、层序遍历都写一遍翻转算法
//递归
class Solution
{
// 力扣中要求返回根节点
TreeNode* invertTree(TreeNode* root)
{
if(root == NULL) return root;
swap(root->left, root->right);
invert(root->left);
invert(root->right);
return root;
}
};
//迭代
class Solution
{
TreeNode* invertTree(TreeNode* root)
{
stack<TreeNode*> st;
if(root == NULL) return root;
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
{
TreeNode* invertTree(TreeNode* root)
{
queue<TreeNode*> que;
if(root == NULL) return root;
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;
}
}
// 写完之后发现只是将二叉树的遍历代码中,存储操作换成了交换swap而已
对称二叉树
先留个坑,今天脑力消耗够了,先去学个别的