二叉树展开为链表
// 二叉树展开为链表
package binarytree
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
// 方法一前序遍历
/*
将二叉树展开为单链表之后,单链表中的节点顺序即为二叉树的前序遍历访问各节点的顺序。
因此,可以对二叉树进行前序遍历,获得各节点被访问到的顺序。由于将二叉树展开为链表之后会破坏二叉树的结构,
因此在前序遍历结束之后更新每个节点的左右子节点的信息,将二叉树展开为单链表。
作者:力扣官方题解
链接:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/solutions/356853/er-cha-shu-zhan-kai-wei-lian-biao-by-leetcode-solu/
*/
func flatten(root *TreeNode) {
list := preorderTraversall(root)
for i := 1; i < len(list); i++ {
prev, curr := list[i-1], list[i]
prev.Left, prev.Right = nil, curr
}
}
func preorderTraversall(root *TreeNode) []*TreeNode {
list := []*TreeNode{}
if root != nil {
list = append(list, root)
list = append(list, preorderTraversall(root.Left)...)
list = append(list, preorderTraversall(root.Right)...)
}
return list
}