题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

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

然后就没了。。。

全部评论

相关推荐

谦虚的布莱克选钝角:华为呢,那个很热情的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务