/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
import java.util.LinkedList;
public class Solution {
    
    LinkedList<TreeLinkNode> ll = new LinkedList<TreeLinkNode>();
    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        if(pNode == null) return null;
        TreeLinkNode head = null;
        TreeLinkNode fatherNode = findfatherNode(pNode);
        in_order(fatherNode);
        for(int i = 0;i<ll.size();i++){
            if(ll.get(i) == pNode){
                if(i+1 < ll.size()){
                    head = ll.get(i+1);
                }
            }
        }
        return head;
    }
    TreeLinkNode in_order(TreeLinkNode root){
        if(root == null) return null;
        in_order(root.left);
        ll.offer(root);
        in_order(root.right);
        return root;
    }
    TreeLinkNode findfatherNode(TreeLinkNode father){
        if(father == null) return father;
        while(father.next != null){
            father = father.next;
        }
        return father;
    }
}