题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
思路
关键字:二叉搜索树,排序,要求原地置换。可以进行中序遍历,遍历过程中,保存上一个节点,调整当前节点的left指向和上一个节点的right指向。最后对头尾节点对指向进行特殊处理即可。
代码
class Solution {
Node temp,head;
public Node treeToDoublyList(Node root) {
if(root == null){
return null;
}
recursive(root);
head.left = temp;
temp.right = head;
return head;
}
public Node recursive(Node root){
if(root == null){
return null;
}
recursive(root.left);
//最小节点在这里
if(temp == null){
head = root;
}
//调整节点指向即可
else{
temp.right = root;
root.left = temp;
}
//temp用来记录当前节点,作为下一个节点的前序节点
temp = root;
recursive(root.right);
return root;
}
}