力扣226题,翻转二叉树
题目描述
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
输入输出样例
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
输入:root = [2,1,3]
输出:[2,3,1]
输入:root = []
输出:[]
解法一,使用递归,自低向上
//使用递归进行,自底向上
TreeNode* invertTree(TreeNode* root) {
//设定递归结束条件
if(!root)
{
return nullptr;
}
TreeNode*left=invertTree(root->left);
TreeNode*right=invertTree(root->right);
root->left=right;
root->right=left;
return root;
}
解法二,使用递归,自顶向下
//使用递归进行,自顶向下
TreeNode *invertTree2(TreeNode*root)
{
if(!root)
{
return nullptr;
}
//交换结点
TreeNode *temp=root->left;
root->left=root->right;
root->right=temp;
invertTree(root->left);
invertTree(root->right);
return root;
}
解法三,使用BFS,迭代
//解法三,使用BFS,迭代进行交换
TreeNode *invertTree3(TreeNode*root)
{
if(!root)
{
return nullptr;
}
//使用队列进行辅助
queue<TreeNode*>que;
//根节点的入队
que.push(root);
while(!que.empty())
{
TreeNode* topNode=que.front();
que.pop();
TreeNode* tempNode=topNode->left;
//交换左右结点的值
topNode->left=topNode->right;
topNode->right=tempNode;
//左右结点入队
if(topNode->left)
{
que.push(topNode->left);
}
if(topNode->right)
{
que.push(topNode->right);
}
}
return root;
}