题目描述
https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/
思路题解
dfs,用lt,rt保存当前子树遍历的结果。用lt_end、rt_end保存当前子树的最后一个节点。
注意空指针。
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func flatten(root *TreeNode) {
root,_=dfs(root)
}
func dfs(root *TreeNode)(*TreeNode,*TreeNode){
if root==nil{
return nil,nil
}
if root.Left==nil&&root.Right==nil{
return root,root
}
lt,lt_end:=dfs(root.Left)
rt,rt_end:=dfs(root.Right)
root.Left=nil
if lt!=nil{
root.Right=lt
}
if lt_end!=nil{
lt_end.Left=nil
lt_end.Right=rt
}
if rt_end==nil{
rt_end=lt_end
}
return root,rt_end
}
左边每个节点左右的数字代表当前返回的lt和lt_end(右边同样),右边代表生成的返回节点。