输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
其实两个递归是一样的,只是返回的节点不一样,一个是头,一个是尾,为了清晰把它分开了
public TreeNode Convert(TreeNode pRootOfTree){
if(pRootOfTree == null) return null;
return rightConvert(pRootOfTree, null);
}
public TreeNode leftConvert(TreeNode pRootOfTree,TreeNode preNode) {
if(pRootOfTree == null) return null;
pRootOfTree.left = leftConvert(pRootOfTree.left,pRootOfTree);
pRootOfTree.right = rightConvert(pRootOfTree.right,pRootOfTree);
while (pRootOfTree.right != null) pRootOfTree = pRootOfTree.right;
pRootOfTree.right = preNode;
return pRootOfTree;
}
public TreeNode rightConvert(TreeNode pRootOfTree,TreeNode preNode) {
if(pRootOfTree == null) return null;
pRootOfTree.left = leftConvert(pRootOfTree.left,pRootOfTree);
pRootOfTree.right = rightConvert(pRootOfTree.right,pRootOfTree);
while (pRootOfTree.left != null) pRootOfTree = pRootOfTree.left;
pRootOfTree.left = preNode;
return pRootOfTree;
}