import java.util.*;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public TreeNode Convert(TreeNode pRootOfTree) {
        if (pRootOfTree == null) return null;
        TreeNode[] res = convert(pRootOfTree);
        return res[0];
    }

    public TreeNode[] convert(TreeNode root) {
        //TreeNode[0]是转换链表的最左侧节点
        //TreeNode[1]是转换链表的最右侧节点
        if (root.left == null && root.right == null) return new TreeNode[] {root, root};

        TreeNode[] leftRes = new TreeNode[2];
        TreeNode[] rightRes = new TreeNode[2];
        TreeNode[] curRes = new TreeNode[2];

        if (root.left != null) {
            leftRes = convert(root.left);
            //拼接
            leftRes[1].right = root;
            root.left = leftRes[1];
            curRes[0] = leftRes[0];
        } else {
            curRes[0] = root;
        }

        if (root.right != null) {
            rightRes = convert(root.right);
            //拼接
            rightRes[0].left = root;
            root.right = rightRes[0];
            curRes[1] = rightRes[1];
        } else {
            curRes[1] = root;
        }

        return curRes;
    }
}