题目:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
可以知道,二叉搜索树的中序遍历,得到一个排序的输出
在中序遍历中
将当前结点的左孩子指向上一个结点
将上一个结点的右孩子指向当前结点
中序遍历完成后,二叉搜索树转换成了排序的双向链表
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if (pRootOfTree==null)return null;
ConvertGo(pRootOfTree);
return firstNode;
}
TreeNode lastNode=null;
TreeNode firstNode=null;
boolean isFindFirst =false;
public TreeNode ConvertGo(TreeNode pRootOfTree) {
if (pRootOfTree.left!=null) Convert(pRootOfTree.left);
if (!isFindFirst){
firstNode=pRootOfTree;
isFindFirst =true;
}
pRootOfTree.left=lastNode;
if (lastNode!=null)lastNode.right=pRootOfTree;
lastNode=pRootOfTree;
if (pRootOfTree.right!=null)Convert(pRootOfTree.right);
return null;
}
}