java solution
class Solution {
public void flatten(TreeNode root) {
//首先设置递归终止条件
if(root == null) return;
//分别递归处理左右子树,
//递归需要先处理子问题(子树的拉平),然后才能处理当前问题(当前节点的指针调整)
flatten(root.left);
flatten(root.right);
//存储右子树
TreeNode tempRight = root.right;
//然后把左子树挪到右子树
root.right = root.left;
root.left = null;
//开始寻找右子树的最深最右节点
TreeNode curr = root;
while(curr.right != null) {
curr = curr.right;
}
curr.right = tempRight;
}
}