翻转一棵二叉树。
示例:
输入:
4 / \ 2 7 / \ / \ 1 3 6 9
输出:
4 / \ 7 2 / \ / \ 9 6 3 1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
递归版:
TreeNode* invertTree(TreeNode* root) {
if (root == NULL)
return NULL;
auto tmp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(tmp);
return root;
}
非递归版:利用队列完成
TreeNode* invertTree(TreeNode* root) {
if(root == nullptr) {
return nullptr;
}
queue<TreeNode*> que;
que.push(root);
while(que.size())
{
TreeNode* cur = que.front();
que.pop();
TreeNode* temp = cur->right;
cur->right = cur->left;
cur->left = temp;
if(cur->left)
que.push(cur->left);
if(cur->right)
que.push(cur->right);
}
return root;
}