算法列表

114.二叉树展开为链表 中等

布莱克2026-03-27 10:53二叉树

问题:

给你二叉树的根结点 root ,请你将它展开为一个单链表:

  • 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null
  • 展开后的单链表应该与二叉树 先序遍历 顺序相同。

示例 1:

输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [0]
输出:[0]

回答:

先序遍历,根,左,右,可以看出当前节点的左节点的最右侧节点最后是连到当前节点的右节点,

如果当前节点的左节点没有右节点,则左节点连到当前节点的右节点

然后当前节点的右节点指向左节点,同时把左节点置空,持续遍历直到最后

var flatten = function(root) {
    if (!root) return null;
    let cur = root;
    while (cur) {
        if (cur.left) {
            let prev = cur.left;
            //找到左子树的最右节点
            while (prev.right) {
                prev = prev.right;
            }
            prev.right = cur.right;
            cur.right = cur.left;
            cur.left = null;
        }
        cur = cur.right;
    }
};


assistant