/**二叉搜索树的中序遍历就是递增的排序,所以就运用中序遍历方法来做。
* 算法思想:
* 中序遍历的步骤,只不过在递归的中间部分不是输出节点值,而是调整指针指向。
* 10
* /\
* 5 12
* /\
* 4 7
* 步骤记住就行,第一次执行,到4的时候,head和resulthead都指向这个
* 指针调整的其中一步:4是head 5是pRootOfTree 然后调整head右指向5,5左指向4,
* 然后5变成head就行了。
*/
public class TreeNode{
int value;
TreeNode left;
TreeNode right;
public TreeNode(int value){
this.value=value;
}
}
TreeNode head=null;//表示转换后最后一个节点
TreeNode resultHead=null;//表示将二叉搜索树转为双向链表后的第一个节点
public TreeNode Convert(TreeNode pRootOfTree){
ConverSub(pRootOfTree);
return resultHead;
}
public void ConverSub(TreeNode pRootOfTree){
if(pRootOfTree==null){
return ;
}
ConverSub(pRootOfTree.left);
if(head==null){
head=pRootOfTree;
resultHead=pRootOfTree;
}
else{//将根节点加入双向链表中,设置左右连接
head.right=pRootOfTree;
pRootOfTree.left=head;
head=pRootOfTree;
}
ConverSub(pRootOfTree.right);
}