public class Solution {
//定义链表的最后一个节点
TreeNode tail = null;
//链表的第一个节点
TreeNode head = null;
public TreeNode Convert(TreeNode pRootOfTree) {
ConvertSub(pRootOfTree);
return head;
}
//构造一个递归函数中序遍历二叉树
private void ConvertImpl(TreeNode pRootOfTree) {
if(pRootOfTree==null) return;
//递归遍历左子树
ConvertSub(pRootOfTree.left);
//左子树为空,这个条件的触发在:左子树的最左节点
if (tail == null) {
//根节点即为尾节点
tail = pRootOfTree;
head = pRootOfTree;
}
else {
//把根节点连接到左子树的末尾
tail.right = pRootOfTree;
pRootOfTree.left = tail;
//更新尾节点
tail = pRootOfTree;
}
//递归遍历右子树
ConvertImpl(pRootOfTree.right);
}
}