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

来源:互联网 发布:苹果电脑图片设计软件 编辑:程序博客网 时间:2024/05/17 23:08

思路

  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;}
原创粉丝点击