输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
public class Solution {
static TreeNode tail = null;
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return null;
TreeNode result = null;
TreeNode p = pRootOfTree;
/*while( p != null && p.left != null){
p = p.left;
}*/
while(p.left != null){//找到转换后的最开始节点
p = p.left;
}
result = p;
convert(pRootOfTree);
tail = null;//可能因为牛客的多个测试用例在一次程序执行过程完成,故全局变量tail会影响下次测试结果
return result;
}
//中序遍历修改指针指向
private static void convert(TreeNode root){
if(root == null) return;
TreeNode cur = root;
if(cur.left != null)
convert(cur.left);
cur.left = tail;
if(tail != null)
tail.right = cur;
tail = cur;
if(cur.right != null){
convert(cur.right);
}
}
}