输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
剑指 Offer 36. 二叉搜索树与双向链表 - 力扣(LeetCode) (leetcode-cn.com)
思路:二叉搜索树的中序遍历结果是有序的,所以要构建排序的循环双向链表就要进行中序遍历,用pre记录前一个遍历到的结点,node表示当前结点,再遍历过程中令node.left= pre; pre.right = node;即可,最后把头节点和尾结点连起来。
class Solution {
public Node treeToDoublyList(Node root) {
if(root == null){
return null;
}
infix(root);
pre.right = head;
head.left = pre;
return head;
}
Node pre = null;
Node head = null;
public void infix(Node node){
if(node == null){
return;
}
infix(node.left);
if(pre == null){
head = node;
}else{
pre.right = node;
}
node.left = pre;
pre = node;
infix(node.right);
}
}