题目要求:
入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路:
本题的本质即输出二叉搜索树的中序遍历,二叉搜索树的中序遍历就为一个排序好队列。
因此目前的问题转化为:如何进行二叉搜索树的中序遍历,并将其转换为双链表
分为三步:
(1)找到最底层的左叶子节点,并作为双向链表的头节点。
(2)对于不是头结点的点,调整链表指针,
调整为:当前节点的左节点为上一个节点;上一个节点的右节点为当前节点;上一个节点指向本节点;
(3)跳转到当前节点的右节点
public class Solution {
TreeNode head = null;
TreeNode realhead = null;
public TreeNode Convert(TreeNode root){
ConverSub(root);
return realhead;
}
private void ConverSub(TreeNode root){
if(root == null){
return;
}
ConverSub(root.left);
if(head==null){
head = root;
realhead = root;
}else{
head.right = root;
root.left = head;
head = root;
}
ConverSub(root.right);
}
}