/*
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点,只能调整树中结点指针的指向。
*/
//概念:二叉搜索树,它或者是一棵空树,或者是具有下列性质的二叉树:
//若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
//若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
public class Class31 {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
TreeNode leftLast = null;
TreeNode leftHead = null;
public TreeNode Convert(TreeNode pRootOfTree){
convertSubTree(pRootOfTree);
return leftHead;
}
public void convertSubTree(TreeNode root){
if(root == null){
return;
}
convertSubTree(root.left);
if(leftLast == null){
leftLast = root;
leftHead = root;
}else{ // //建立双向链接
leftLast.right = root; //左子树最后一个节的右链接指向根节点
root.left = leftLast;//根节点的左链接指向左子树最大节点
leftLast = root;//将左侧最大节点设为根节点,作为链表前半部分最大节点
}
convertSubTree(root.right);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}