BST树转换为有序双向循环链表

思路

  1. 以中序遍历遍历一棵二叉树的时候,每遍历到一个结点,修改该结点的left指针指向前一个遍历到的结点,修改前一个遍历结点的right指针,指向当前结点。
  2. 每次递归调用的时候,更新当前遍历结点的right指针让其指向头结点head,同时更新头结点head的left指针让其指向当前遍历结点。

代码

void treeToDoubleList(Node p,Node prev,Node head){
    if(p == null) return;
    treeToDoubleList(p.left,prev,head);
    //当前节点指向前一个节点
    p.left = prev;
    if(prev != null) prev.right = p;//前一个节点的right指针指向当前节点
    else head = p;//前面没有节点则当前节点为head.(最小的节点)
    head.left = p;
    p.right = head;
    prev = p;
    treeToDoubleList(p.right,prev,head);
}
Node treeToDoubleList(Node root){
    Node prev = null;
    Node head = null;
    treeToDoubleList(root,prev,head);
    return head;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值