二叉树

二叉树展开为链表

中等#114Java时间 O(n)空间 O(1)

题目要做什么

原地把二叉树展开成前序顺序的链:每个节点 left 为 null,right 指向下一个节点。输出展示 right 链的值。

题目示例输入root = [1,2,5,3,4,null,6]
题目示例输出[1,2,3,4,5,6]

01 为什么这样做

若当前节点有左子树,先找左子树最右节点,把原右子树接在它后面,再把整个左子树移到右边。随后沿 right 继续。

始终成立的条件

current 之前的 right 链已符合前序顺序;剩余子树仍保留全部节点。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public void flatten(TreeNode root) {3        TreeNode current = root;4        while (current != null) {5            if (current.left != null) {6                TreeNode predecessor = current.left;7                while (predecessor.right != null) {8                    predecessor = predecessor.right;9                }10                predecessor.right = current.right;11                current.right = current.left;12                current.left = null;13            }14            current = current.right;15        }16    }17}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索