题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
/**二叉搜索树的中序遍历就是递增的排序,所以就运用中序遍历方法来做。
* 算法思想:
* 中序遍历的步骤,只不过在递归的中间部分不是输出节点值,而是调整指针指向。
* 10
* /\
* 5 12
* /\
* 4 7
* 步骤记住就行,第一次执行,到4的时候,head和resulthead都指向这个
* 指针调整的其中一步:4是head 5是pRootOfTree 然后调整head右指向5,5左指向4,然后5变成head就行了。
}
*/
public class Solution {
TreeNode head = null;
TreeNode resultHead = null;
public TreeNode Convert(TreeNode root) {
helper(root);
return resultHead;
}
public void helper(TreeNode root) {
if(root == null) return;
helper(root.left);
if(head == null) {
head = root;
resultHead = root;
}else {
head.right = root;
root.left = head;
head = root;
}
helper(root.right);
}
}