essay

hot100-二叉树展开为链表

#算法

hot100——二叉树展开为链表

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

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。

展开后的单链表应该与二叉树 先序遍历 顺序相同。

示例 1:

image.png

输入: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]

提示:

树中结点数在范围 [0, 2000] 内

-100 <= Node.val <= 100

解法

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func flatten(root *TreeNode) {
    curr := root
    for curr != nil {
        if curr.Left != nil {
            // 寻找左子树的最右节点
            pre := curr.Left
            for pre.Right != nil {
                pre = pre.Right
            }
            // 将原右子树接到最右节点的右边
            pre.Right = curr.Right
            // 将左子树移到右边
            curr.Right = curr.Left
            curr.Left = nil
        }
        // 继续处理下一个节点
        curr = curr.Right
    }
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接