题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
http://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
整体思路是中序遍历。重构一个双向链表。双向链表需要一个临时变量头节点,和当前节点。用这两个变量构建一个双向链表。
整体结构:
TreeNode head = null; //头部节点
TreeNode cur = null; //当前节点
public TreeNode Convert(TreeNode pRootOfTree) {
//终止条件
if (pRootOfTree == null ) {
return null;
}
Convert(pRootOfTree.left);
//todo 遍历到这个节点时,处理真正的逻辑,干点什么。
Convert(pRootOfTree.right);
return head;
}
给头节点和当前节点赋值:
Convert(pRootOfTree.left);
//当cur为空时,表示第一次走到这个位置,到了中序遍历的第一个节点,也就是头节点位置
if(cur == null){
cur = pRootOfTree;
head = pRootOfTree;
}else{ //其他一般情况
cur.left = pRootNode ;//往上指向前驱节点
pRootNode.right = cur ; //后继节点
cur = pRootNode ; //临时变量后移
}
Convert(pRootOfTree.right);