这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针; 对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 head指向当前节点的最小值; //因为这个是一个二叉搜索树,所以采用类似于中序遍历的方式,先找到其左节点中的最小值,然后再找到根节点,最后再找到其右节点;
Node pre
=null
,head
=null
;
public Node
treeToDoublyList(Node root
){
if(root
==null
) return null
;
helper(root
);
head
.left
=pre
;
pre
.right
=head
;
return head
;
}
public void helper(Node root
){
if(root
==null
) return ;
helper(root
.left
);
root
.left
=pre
;
if(pre
!=null
) pre
.right
=root
;
else head
=root
;
pre
=root
;
helper(root
.right
);
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-44624.html