public class Solution {
//一个前驱节点 用于修改 pRootOfTRee 的left 和 right 的指向
TreeNode pre = null;
//转换排序
public TreeNode Sort(TreeNode pRootOfTRee){
if(pRootOfTRee == null) return pRootOfTRee;
//先找到二叉树最左边的节点
Convert(pRootOfTRee.left);
//修改节点的指向
pRootOfTRee.left = pre;
//防止是链表头节点的时候空指针异常
if(pre != null){
pre.right = pRootOfTRee;
}
pre = pRootOfTRee;
Sort(pRootOfTRee.right);
return pRootOfTRee;
}
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return pRootOfTree;
//转换成双向链表
TreeNode head = Sort(pRootOfTree);
//因为返回的head 本质上还是二叉树 head 是根节点 所以不能直接返回 head 得让head成为二叉树最左边的节点才 等同于一个双向链表 因为双向链表的头节点的left 是null 所以有以下的循环
while(head.left != null){
head = head.left;
}
return head;
}
}