二叉树展开为链表
给你二叉树的根结点 root
,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode
,其中right
子指针指向链表中下一个结点,而左子指针始终为null
。 - 展开后的单链表应该与二叉树 先序遍历 顺序相同。
示例 1:
func flatten(root *TreeNode) {
if root == nil {
return
}
// 展平左右节点
flatten(root.Right)
flatten(root.Left)
if root.Left == nil {
return
}
// 下面是把右子树连接到左子树的最右节点,然后把左子树作为右子树
tmpNode := root.Left
for tmpNode.Right != nil {
tmpNode = tmpNode.Right
}
tmpNode.Right = root.Right
root.Right, root.Left = root.Left, nil
}