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