【C语言刷LeetCode】226. 翻转二叉树(E)

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9
输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/invert-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题最开始理解错了,考虑复杂了。
一开始思路是遍历二叉树,申请一个二维数组记录每一层的数值。接着按层把记录的数值倒序。最后再次遍历一遍二叉树,把存的数值赋值到对应节点。
但是这样操作只过了6个用例。
看了别人实现,才发现题意理解错了,翻转二叉树是按照节点翻转,而不是按照数值翻转,那么这样题就很简单了:

void handle(struct TreeNode *root) {
    if(root == NULL) {
        return;
    }

    struct TreeNode *temp = root->left;
    root->left = root->right;
    root->right = temp;

    handle(root->left);
    handle(root->right);
}

struct TreeNode* invertTree(struct TreeNode* root){

    handle(root);

    return root;
}

 

你可能感兴趣的:(LeetCode)