翻转一棵二叉树。
示例:
输入:
4 / \ 2 7 / \ / \ 1 3 6 9
输出:
4 / \ 7 2 / \ / \ 9 6 3 1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
思路: 自下向上的,交换左右子树,即可。
在交换子树的时候, 只需把左右子树的指针交换就可以了。 (我大悟了)。。。。
AC:
class Solution {
public:
TreeNode* fun(TreeNode* root)
{
if (root==NULL)
return NULL ;
root->left=fun(root->left);
root->right=fun(root->right);
TreeNode* tem=root->left;
root->left=root->right;
root->right=tem;
return root;
}
TreeNode* invertTree(TreeNode* root) {
if (root==NULL)
return NULL;
return fun(root);
}
};
昨天写了好久,就是写不出来,原来是这样的额。。。