Same Tree
Given binary trees, write a function to check if they is equal or not.
The binary trees is considered equal if they is structurally identical and the nodes has the same value.
Solution One: Recursion
/** Definition for binary tree * struct TreeNode {* int val; * TreeNode *left; * TreeNode *right; * T Reenode (int x): Val (x), left (null), right (NULL) {} *}; */classSolution { Public: BOOLIssametree (TreeNode *p, TreeNode *q) {if(!p &&!)q)return true; Else if(!p &&q)return false; Else if(P &&!)q)return false; Else { if(P->val! = q->val)return false; Else returnIssametree (P->left, Q->left) && issametree (P->right, q->Right ); } }};
Solution Two: Non-recursive
Set up two queues for hierarchy traversal, and check that the corresponding points are equal when entering the team
/** Definition for binary tree * struct TreeNode {* int val; * TreeNode *left; * TreeNode *right; * T Reenode (int x): Val (x), left (null), right (NULL) {} *}; */classSolution { Public: BOOLIssametree (TreeNode *p, TreeNode *q) {if(!p &&!)q)return true; Else if(!p &&q)return false; Else if(P &&!)q)return false; Else { if(P->val! = q->val)return false; Else{Queue<TreeNode*>LQ; Queue<TreeNode*>RQ; Lq.push (P); Rq.push (q); while(!lq.empty () &&!Rq.empty ()) {TreeNode* Lfront =Lq.front (); TreeNode* Rfront =Rq.front (); Lq.pop (); Rq.pop (); if(!lfront->left &&!rfront->Left );//NULL Else if(!lfront->left && rfront->Left )return false; Else if(Lfront->left &&!rfront->Left )return false; Else { if(Lfront->left->val! = rfront->left->val)return false; Else{Lq.push (Lfront-Left ); Rq.push (Rfront-Left ); } } if(!lfront->right &&!rfront->Right );//NULL Else if(!lfront->right && rfront->Right )return false; Else if(Lfront->right &&!rfront->Right )return false; Else { if(Lfront->right->val! = rfront->right->val)return false; Else{Lq.push (Lfront-Right ); Rq.push (Rfront-Right ); } } } return true; } } }};
"Leetcode" Same Tree (2 solutions)