整体思路:
函数f对该树排序,返回值为链表的头节点
f(左子树)
将左子树最后一个结点和root连接
f(右子树)
将右子树头结点和root连接
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null) return pRootOfTree;
TreeNode head = Convert(pRootOfTree.left);
TreeNode rleft = head;
while((rleft!=null)&&(rleft.right!=null))
rleft=rleft.right;
if(rleft!=null)
{
rleft.right=pRootOfTree;
pRootOfTree.left=rleft;
}
TreeNode rright = Convert(pRootOfTree.right);
if(rright!=null)
{
pRootOfTree.right=rright;
rright.left = pRootOfTree;
}
//此处特别注意左子树为空的情况
return head==null?pRootOfTree:head;
}
}