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

然后就没了。。。