- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
要求:1.不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。 2.返回链表中的第一个节点的指针。 算法思路:首先,利用中序遍历,可以把二叉搜索树转化为有序;然后对各个结点进行指针的转化;最后,找原二叉搜索树的最左端结点并返回。
public TreeNode prev = null;
public void ConvertChild(TreeNode pCur){
if (pCur == null)
return;
ConvertChild(pCur.left);
pCur.left = prev;
if(prev != null){
prev.right = pCur;
}
prev = pCur;
ConvertChild(pCur.right);
}
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null)
return null;
ConvertChild(pRootOfTree);
TreeNode head = pRootOfTree;
while(head.left != null){
head = head.left;
}
return head;
}
|