114.M 二叉树展开为链表

Problem: 114. 二叉树展开为链表arrow-up-right

思路

思路1:先递归收集所有节点,然后再调整节点的左右指针。

思路2:通过迭代法收集所有节点,然后再调整节点的左右指针。

思路3:用迭代法一边收集节点,一边调整左右指针。这么做的前提是:需要提前把右子节点入栈,以免丢失右子树的信息。

Code

代码1:

func flattenV1(root *TreeNode) {
	nodes := helperV1(root)
	for i := 0; i < len(nodes)-1; i++ {
		nodes[i].Right = nodes[i+1]
		nodes[i].Left = nil
	}
}

func helperV1(root *TreeNode) []*TreeNode {
	if root == nil {
		return nil
	}

	nodes := []*TreeNode{root}
	nodes = append(nodes, helperV1(root.Left)...)
	nodes = append(nodes, helperV1(root.Right)...)
	return nodes
}

代码2:

代码3:

Last updated