题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:二叉搜索树的中序遍历是排序的,所以我们可以基于中序遍历将其转换为一个排序的双向链表,将节点的左子节点改为双向链表的前驱节点,而右子节点改为双向链表的后继节点。
public class Solution {
TreeNode head=null;
TreeNode realHead=null;//链表的头节点
public TreeNode Convert(TreeNode pRootOfTree) {
ConvertSub(pRootOfTree);
return realHead;
}
private void ConvertSub(TreeNode pRootOfTree){
if (pRootOfTree==null)
return;
ConvertSub(pRootOfTree.left);
if (head==null){
head=pRootOfTree;
realHead=head;
}else{
pRootOfTree.left=head;
head.right=pRootOfTree;
head=pRootOfTree;
}
ConvertSub(pRootOfTree.right);
}
}