package niuke;
public class SearchTreenode3 {
TreeNode lastNode = null;
public static void main(String[] args) {
}
public TreeNode Convert(TreeNode pRootOfTree) {
/*输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。*/
TreeNode left = null;
TreeNode right = null;
if(pRootOfTree == null) { //如果是空节点则返回为空
return null;
}
if(pRootOfTree.left == null && pRootOfTree.right == null) {
lastNode = pRootOfTree;
return lastNode; //无论是左节点还是右节点,当其为叶子节点时返回
}
left = Convert(pRootOfTree.left); //转换左子树
if(left != null) {
lastNode.right = pRootOfTree; //左子树与中间节点建立连接
pRootOfTree.left = lastNode;
}
lastNode = pRootOfTree;
right = Convert(pRootOfTree.right);
if(right != null) {
pRootOfTree.right = right; //中间节点与右节点建立连接
right.left = pRootOfTree;
}
return left != null ? left:pRootOfTree; //最后返回双向链表的头结点
}
}