[offer36二叉搜索数与双向链表]
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
//算法思路:设置两个全局变量节点,记录双链表的头部与尾部
public class Solution{
public Node pre;
public Node tail;
public Node treeToDoublyList(Node root) {
if(root==null)
return null;
inorder(root);
pre.left=tail;
tail.right=pre;
return pre;
}
public void inorder(Node root){//递归中序遍历,会按照中序遍历的顺序,依次访问树中的结点,因此按照中序遍历的顺序依次将结点加入双链表中,就会构造出一个有序的双链表。
if(root==null)
return ;
preorder(root.left);
if(pre==null)
pre=tail=root;
else{
tail.right=root;
root.left=tail;
tail=root;
}
preorder(root.right);
}
}