二叉搜索树与双向链表
输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
public class Offer42 {
//Java没有内存指针的概念,所以用了个静态变量
public static TreeNode last = null;
public static void main(String[] args) {
TreeNode node = Main.createNode();
TreeNode convert = Convert(node);
while (convert!=null){
System.out.println(convert.value);
convert = convert.right;
}
}
//思路:不难看出是个中序遍历,主要思路就是用指针把二叉树按中序遍历顺序走一遍
public static TreeNode Convert(TreeNode node){
ConvertNode(node);
TreeNode head = last;
//last指向尾节点
while (head!=null&&head.left!=null){
head = head.left;
}
return head;
}
//节点的left指前,right指后
public static void ConvertNode(TreeNode node ){
if(node==null)return ;
//指向当前节点
TreeNode current = node;
//先走到最小节点
if(node.left!=null){
ConvertNode(node.left);
}
current.left = last;
if(last!=null){
last.right = current;
}
//指针向前走一步
last = current;
//遍历右子树
if(node.right!=null){
ConvertNode(node.right);
}
}
}