import java.util.*;
public class Solution {
// 重点在于使用pre来保存当前节点的前一个节点
public TreeNode head = null;
public TreeNode pre = null;
public TreeNode Convert(TreeNode pRootOfTree) {
// 整体的思路还是中序遍历递归,先Convert(root.left)再写逻辑处理,最后递归遍历右子树Convert(root.rieght)
if(pRootOfTree == null) return null;
// 首先递归到最左最小值,以题中的例子为例,这时候pre = 4,head = 4
Convert(pRootOfTree.left);
if(pre == null){
head = pRootOfTree;
pre = pRootOfTree;
}
// 当前节点与上一节点建立连接,将pre设置为当前值,pre就是遍历树的指针,而head的值只需要等于最左侧最小的节点就可以了,标记为链表的头
else{
// right连接后继节点,以题中的例子为例,第一个栈顶元素是4,下一个就是6,此时pre==4,pRootOfTree==6,pre.right = pRootOfTree就是将4的右指针指向后继,之后让6的左指针指向前驱pre。最后将pre的值等于当前栈顶元素6,之后出栈进行下一次递归。
pre.right = pRootOfTree;
pRootOfTree.left = pre;
pre = pRootOfTree;
}
Convert(pRootOfTree.right);
return head;
}
}