LintCode-378,二叉树转双链表

这篇博客介绍了如何将二叉树转化为双链表,主要通过中序遍历实现。递归过程中,通过传递参数来标识节点来自左子树还是右子树,然后从中间点开始连接链表两端。
摘要由CSDN通过智能技术生成

在中序遍历的基础上考虑双链表的串联,中序遍历用递归的手法表现就是:

	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即告诉递归函数,他来自左子树,否则来自右子树。

剩下的就是从

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值