题意:
给定一棵二叉树,针对二叉树的每个节点,都交换其左右儿子节点。
方法一:
递归
思路:dfs(递归),先序遍历和后序遍历都可以。
交换每个节点的左右儿子节点。
class Solution {
public:
TreeNode* Mirror(TreeNode* pRoot) {
if(pRoot==nullptr)
return nullptr;
TreeNode *t;
t=pRoot->left;//交换左右儿子节点
pRoot->left=pRoot->right;
pRoot->right=t;
Mirror(pRoot->left);//递归左节点
Mirror(pRoot->right);//递归左节点
return pRoot;
}
}; 时间复杂度:
空间复杂度:![]()
方法二:
bfs
思路:层次遍历每个节点,并交换每个节点的左右儿子节点。
class Solution {
public:
TreeNode* Mirror(TreeNode* pRoot) {
if(pRoot==nullptr)//如果等于空,返回空
return nullptr;
queue<TreeNode*> q;//队列
q.push(pRoot);
while(!q.empty()){
TreeNode* x=q.front();
q.pop();
TreeNode *t=x->left;//交换左右儿子节点
x->left=x->right;
x->right=t;
if(x->left)//如果左节点非空,则入队列
q.push(x->left);
if(x->right)//如果右节点非空,则入队列
q.push(x->right);
}
return pRoot;
}
}; 时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号