题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路
第一步:二叉搜索树转为排序的双向链表,必然是使用中序遍历。
第二步:使用一个指针,用来从最小值遍历到最大值。
第三步:使用递归的中序遍历,之后使当前的值指向下一个值,下一个值指向当前值则可以使其转为双向链表
代码如下
public TreeNode Convert(TreeNode pRootOfTree) {
if (pRootOfTree == null) return null;
helper(pRootOfTree);
return res;
}
TreeNode head = null;
TreeNode res = null;
public void helper(TreeNode root) {
if (root == null) return;
helper(root.left);
//找到最小值,即最左的结点
if (head == null) {
head = root;
res = root;
} else {
head.right = root;
root.left = head;
head = root;
}
helper(root.right);
}