题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:通过比二叉搜索树的结构和双向链表结构易得,中序遍历的结果就是排序链表的序列,此时只需定义一个pre指针指向上一个节点,在遍历中将这些节点串联起来即可。
// 5
// 3 8
//1 4 6 9
public class Solution {
TreeNode pre = null;//指向遍历时的上一个节点
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null)
return null;
midTravel(pRootOfTree);
while(pRootOfTree.left!=null){
pRootOfTree = pRootOfTree.left;
}
return pRootOfTree;
}
public void midTravel(TreeNode cur){
if(cur==null)
return;
midTravel(cur.left);
cur.left = pre;//自已的左边指向上一个节点
if(pre!=null)//上一个节点的右边指向自已
pre.right = cur;
pre = cur;//上一个节点更新边当前节点
midTravel(cur.right);
}
}