LeetCode-114-二叉树展开为链表
题目
给定一个二叉树,原地将它展开为一个单链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
解法-递归
题目要求原地展开,故不能使用数组类变量存储全部节点值再重构树。将左右子树分别递归展开,将原左子树变为节点的右子树,再将原右子树变为当前右子树最右节点的右子树。
go代码实现
func flatten(root *TreeNode) {
if root == nil {
return
}
flat(root)
}
func flat(node *TreeNode) {
if node == nil {
return
}
flat(node.Left)
flat(node.Right)
var temp *TreeNode = node.Right
node.Right, node.Left = node.Left, nil
for node.Right != nil {
node = node.Right
}
node.Right = temp
}
或者简化一下代码:
func flatten(root *TreeNode) {
if root == nil {
return
}
flat(root.Left)
flat(root.Right)
var temp *TreeNode = root.Right
root.Right, root.Left = root.Left, nil
for root.Right != nil {
root = root.Right
}
root.Right = temp
}
标题:LeetCode-114-二叉树展开为链表
作者:guobing
地址:http://www.guobingwei.tech/articles/2020/10/25/1603563225349.html