Reference: LeetCode  Difficulty: Easy 
Problem 
Given two binary trees, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurally identical and the nodes have the same value.
 
Example:  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Input:     1          1            / \       / \          2    3      2    3          [1 ,2 ,3 ],   [1 ,2 ,3 ] Output: true  Input:     1          1            /           \          2              2          [1 ,2 ],     [1 ,null ,2 ] Output: false  
 
Analysis Recursion Note:  Do the null check at the beginning.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public  boolean  isSameTree (TreeNode p, TreeNode q)  {  return  preorder(p, q); } private  boolean  preorder (TreeNode p, TreeNode q)  {  if  (p == null  || q == null ) {     return  p == null  && q == null ;   }   if  (p.val != q.val) return  false ;   return  preorder(p.left, q.left) && preorder(p.right, q.right);          } 
 
Time:  $O(N)$Space:  $O(h)$
Iteration Use two stacks to simulate the preorder traversal.
Note: 
Stack and Queue can contain null elements, while Deque can’t. 
Do null check first, and then do the value check. Make sure p and q are not null. 
The while condition should consider two stacks at the same time. 
The return statement should check if two stacks are empty at the same time. 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 public  boolean  isSameTree (TreeNode p, TreeNode q)  {  Stack<TreeNode> pStack = new  Stack <>();   Stack<TreeNode> qStack = new  Stack <>();   pStack.push(p); qStack.push(q);      while  (pStack.size() > 0  && qStack.size() > 0 ) {     p = pStack.pop();     q = qStack.pop();               if  (p == null  || q == null ) {       if  (p == null  && q == null ) continue ;       else  return  false ;     }               if  (p.val != q.val) return  false ;               pStack.push(p.right);      qStack.push(q.right);     pStack.push(p.left);     qStack.push(q.left);   }   return  pStack.size() == 0  && qStack.size() == 0 ; } 
 
Time:  $O(N)$Space:  $O(h)$