在中序遍历的基础上考虑双链表的串联,中序遍历用递归的手法表现就是:
DoublyListNode dbl1 = bstSupport(root.left);
DoublyListNode dbl2 = new DoublyListNode(root.val);
DoublyListNode dbl3 = bstSupport(root.right);
随后进行子树串联工作,即当dbl1非空,就进行dbl1到dbl2的串联;dbl3非空,就进行dbl2到dbl3的串联:
if(dbl1!=null){
dbl1.next = dbl2;
dbl2.prev = dbl1;
}
if(dbl3!=null){
dbl2.next = dbl3;
dbl3.prev = dbl2;
}
因为上面这种串联方式,为避免丢失数据,左子树的返回值应该是左子树串联完成后的最后一个节点,右子树的返回值应为右子树串联完成后的第一个节点。
在递归中如何让各子树知道自己是来自左子树还是右子树呢?简单的方法,传入一个参数,这里参数值为1即告诉递归函数,他来自左子树,否则来自右子树。
剩下的就是从