题目描述:
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
/*
//用递归
if (root == NULL)
return NULL;
//中
TreeNode *pTemp = root->left;
root->left = root->right;
root->right = pTemp;
//左
mirrorTree(root->left);
//右
mirrorTree(root->right);
return root;
*/
//非递归,用层序遍历,遍历每个结点,把每个节点的左右孩子都反转
queue<TreeNode *> qu;
if (root == NULL)
return NULL;
qu.push(root);
while (!qu.empty())
{
//出队
TreeNode *pMark = qu.front();
qu.pop();
//交换pMark的左右孩子
TreeNode *pTemp = pMark->left;
pMark->left = pMark->right;
pMark->right = pTemp;
//如果pMark左右孩子不为空,分别入队
if (pMark->left) qu.push(pMark->left);
if (pMark->right) qu.push(pMark->right);
}
return root;
}
};