题意:
给定一棵二叉树,针对二叉树的每个节点,都交换其左右儿子节点。
方法一:
递归
思路: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; } };
时间复杂度:空间复杂度: