/*
public class TreeNode
{
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode (int x)
    {
        val = x;
    }
}*/
using System.Collections.Generic;
class Solution
{
    public TreeNode Convert(TreeNode pRootOfTree)
    {
        Stack<TreeNode> stack = new Stack<TreeNode>();
        if(pRootOfTree == null) return pRootOfTree;
        stack.Push(pRootOfTree);
        TreeNode cur;
        TreeNode pre = null;
        TreeNode head = pRootOfTree;
        bool isFirst = true;
        while(stack.Count != 0){
            cur = stack.Pop();
            if(cur != null){
                if(cur.right != null) stack.Push(cur.right);
                stack.Push(cur);
                stack.Push(null);
                if(cur.left != null) stack.Push(cur.left);
            }
            else{
                if(isFirst){
                    cur = stack.Pop();
                    head = cur;
                    pre = cur;
                    isFirst = false;
                }
                else{
                    cur = stack.Pop();
                    pre.right = cur;
                    cur.left = pre;
                    pre = cur;
                }
            }
        }
        return head;
    }
}