输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
分析:
对二叉搜索树进行中序遍历,递归操作。
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private TreeNode Last = null;//双链表的尾结点
//将一个子树转换为一个双链表,返回双链表的第一个值
public TreeNode Convert(TreeNode root) {
if(root==null){
return null;
}
//当左子树为空,则根节点为双链表的第一个数
TreeNode head = Convert(root.left);
if(root.left==null){
head = root;
}
//连接当前节点root和当前链表的尾结点
root.left = Last;
if(Last!=null){
Last.right = root;
}
Last = root;
Convert(root.right);
return head;
}
}