二叉搜索树是一种特殊的二叉树,左子树的所有结点小于根节点,右子树的所有结点大于根节点。
此题使用中序遍历即可得到有序序列
把相邻的元素互相指向,left指向前一个元素,right指向后一个元素
1.判定特殊情况,如果为空,则返回null
2.递归把左子树变成双向链表,并返回这个链表的第一个结点
3.如果左侧链表的头结点不为空,当前左侧链表的尾巴找到,让左侧链表的尾结点和当前root结点相互指向
4.递归将右子树转换成双向链表
5.把右侧链表的头节点和当前结点相互指向
public TreeNode Convert(TreeNode pRootOfTree){
if(pRootOfTree == null){
return null;
}
if(pRootOfTree.left == null && pRootOfTree.right == null){
return pRootOfTree;
}
TreeNode left = Convert(pRootOfTree.left);
TreeNode leftTail = left;
while(pRootOfTree.left != null && leftTail.right != null){
leftTail = leftTail.right;
}
if(left != null){
leftTail.right = pRootOfTree;
pRootOfTree.left = leftTail;
}
TreeNode right = Convert(pRootOfTree.right);
if(right != null){
pRootOfTree.right = right;
right.left = pRootOfTree;
}
return left == null?pRootOfTree:left;
}