【题目描述】
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
【算法实现】
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
TreeNode pLastNode = null;
TreeNode pHead = CovertCore(pRootOfTree, pLastNode);
if (pHead == null) {
return null;
}
while (pHead.left != null) {
pHead = pHead.left;
}
return pHead;
}
public TreeNode CovertCore(TreeNode pRootOfTree, TreeNode pLastNode) {
if (pRootOfTree == null) {
return null;
}
if (pRootOfTree.left != null) {
pLastNode = CovertCore(pRootOfTree.left, pLastNode);
}
TreeNode pCur = pRootOfTree;
pCur.left = pLastNode;
if (pLastNode != null) {
pLastNode.right = pCur;
}
pLastNode = pCur;
if (pRootOfTree.right != null) {
pLastNode = CovertCore(pRootOfTree.right, pLastNode);
}
return pLastNode;
}
}