package main
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 
 * @param pRootOfTree TreeNode类 
 * @return TreeNode类
*/
func Convert( pRootOfTree *TreeNode ) *TreeNode {
    root := pRootOfTree
	if root == nil {
		return nil
	}
	//记录上一个节点
	var preNode *TreeNode
	//获取双向链表头部
	head := root
	for head.Left != nil {
		head = head.Left
	}
	//中序遍历
	var dfs func(node *TreeNode)
	dfs = func(node *TreeNode) {
		if node == nil {
			return
		}
		dfs(node.Left)
		node.Left = preNode
		if preNode != nil {
			preNode.Right = node
		}
		preNode = node
		dfs(node.Right)
	}
	dfs(root)
	return head
}