代码2随想录 226. 翻转二叉树

84 阅读1分钟

226. 翻转二叉树 - 力扣(LeetCode)

听说一位巨佬面Google被拒了,因为没写出翻转二叉树 | LeetCode:226.翻转二叉树_哔哩哔哩_bilibili

思想:首先确定遍历方式

二叉树有两种遍历方式递归遍历迭代遍历

首先确定遍历方式

这里采用诋递归遍历方式.

递归遍历最基础的有三种遍历顺序: 前 ``中

这道题用 前序 后序 好做,用层序也可以。

我们反转二叉树不是交换两个节点的值,而是交换它们的指针。

为什么是交换指针呢?因为交换指针可以把孩子节点也给交换了。

如图(a-1)是原树,交换左右子树指针之后变为了图(a-2),此时再递归遍历左子树,然后交换左子树孩子节点指针,变为图(a-3),此时左子树遍历到空,向上返回。

再去遍历右子树孩子节点,交换右子树孩子节点指针,变为图(a-4),此时完成反转二叉树。

image.png

交换完 根节点 的左右孩子 节点之后,再递归左子树,然后再交换左子树

这里设置递归结束条件 : 当递归遍历到空节点时 结束递归。

这时候我们再递归右子树交换右子树。右子树也遍历到空,就结束递归,此时整个二叉树就完成反转了。

code

image.png