题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
http://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
*
* @param pRootOfTree TreeNode类
* @return TreeNode类
*/
func Convert( pRootOfTree *TreeNode ) *TreeNode {
// write code here
if pRootOfTree==nil{
return nil
}
var dfs func(node *TreeNode)//准备闭包
var head *TreeNode
var pre *TreeNode
dfs= func(cur *TreeNode) {
if cur==nil{
return
}
dfs(cur.Left)
if pre==nil{
head=cur
}else{
pre.Right=cur
}
cur.Left=pre
pre=cur
dfs(cur.Right)
}
dfs(pRootOfTree)
// head.Left=pre
// pre.Right=head
return head
}
找着lc上抄的几乎可以说是,不过是参考的Java代码,转到牛客来写这道题是因为lc上没有go语言的选项,然后说一下这个思路吧。就是还挺好想的,是把二叉树中序遍历,然后把前一个遍历到的节点给存下来
pre=cur
然后如果pre节点为空的话把该节点赋给head节点,不然的话就是把pre的后指针指向cur当前节点
pre.Right=cur
然后就是当前节点cur的前指针指向pre
cur.Left=pre
然后就没了。。。