来自一道反转二叉树题目的疑惑(Homebrew 的作者被 Google 拒啦,因为他不会翻转二叉树…)

之前在网上看到:Homebrew 的作者被 Google 拒啦,因为他不会翻转二叉树…

来自一道反转二叉树题目的疑惑

于是自己便去 leetcode 上做下这道题:leetcode-cn.com/problems/invert-bi...

用的是 PHP,下面两种代码的运行结果却让我产生了疑惑:

function invertTreeMy ($root) 
{
    if ($root === null) {
        return $root;
    }

    $root->left = $this->invertTree($root->right);
    $root->right = $this->invertTree($root->left);

    return $root;
}

上面代码运行结果:

来自一道反转二叉树题目的疑惑(Homebrew 的作者被 Google 拒啦,因为他不会翻转二叉树…)

function invertTree ($root) 
{
    if ($root === null) {
        return $root;
    }

    $left = $root->left;
    $right = $root->right;
    $root->left = $this->invertTree($right);
    $root->right = $this->invertTree($left);

    return $root;
}

运行结果:

来自一道反转二叉树题目的疑惑(Homebrew 的作者被 Google 拒啦,因为他不会翻转二叉树…)

invertTreeMyinvertTree 方法的不同点是:递归调用时,传的变量方式有点不同。

但是输出结果却截然不同,网上搜索了下没发现想要的答案。

希望社区的伙伴大神们能够解答解答:smile::smile::smile:

二毛
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

已经明白啦!是我太粗心,没有一步步去推导。 递归前,应该把本次递归的变量先保存起来,不然上一次递归的结果 $root->left会影响到 $root->right

file

3年前 评论
讨论数量: 3

我也做了,同问 :joy: :joy: :joy:

3年前 评论

第一个代码传入的left是修改后的的,第二个传入的是未修改的,类似于i++和++i

$root->left = $this->invertTree($root->right);
$root->right = $this->invertTree($root->left);
3年前 评论

已经明白啦!是我太粗心,没有一步步去推导。 递归前,应该把本次递归的变量先保存起来,不然上一次递归的结果 $root->left会影响到 $root->right

file

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!