//使用双端队列,空间复杂度为O(N)
public TreeNode Convert(TreeNode pRootOfTree) {
if (pRootOfTree == null) {
return null;
}
ArrayDeque<TreeNode> ad = new ArrayDeque<TreeNode>();
inOrder(pRootOfTree, ad);
TreeNode head = ad.pop();
head.left = null;
TreeNode before = head;
while (!ad.isEmpty()) {
TreeNode tmp = ad.pop();
tmp.left = before;
before.right = tmp;
before = tmp;
}
before.right = null;
return head;
}
private void inOrder(TreeNode pRootOfTree, ArrayDeque<TreeNode> ad) {
if (pRootOfTree == null) {
return;
}
inOrder(pRootOfTree.left, ad);
ad.add(pRootOfTree);
inOrder(pRootOfTree.right, ad);
}