Egbert Lin's Blog

“Life is not a race, but a journey to be savoured each step of the way” by Brian Dyson

[LeetCode Road] Same Tree - Solution/C++

100. Same Tree

Question:

Given the roots of two binary trees p and q, 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:

Input: p = [1,2,3], q = [1,2,3]
Output: true

Input: p = [1,2], q = [1,null,2]
Output: false

Input: p = [1,2,1], q = [1,1,2]
Output: false

Constraints:
  • TThe number of nodes in both trees is in the range [0, 100].
  • -10^4 <= Node.val <= 10^4
  • Source code

    Version 1

    Idea:
    This is my first time to process binary tree. After realizing question and example, it lets me recollect the solution of LeetCode 21.

    I can use a similar if statement to code. But, I still don't know how to compare two binary trees of their child. So, I refered to programcreek.
    Finally, I saw source code and understood the solution immediately. We can use recursion to bind the child checking (left & right).

    Time complexity: O(n)
    Space complexity: O(n)

    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
    /**
    * Definition for a binary tree node.
    * struct TreeNode {
    * int val;
    * TreeNode *left;
    * TreeNode *right;
    * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    * };
    */
    class Solution {
    public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
    if(p==NULL && q==NULL){
    return true;
    }else if(p==NULL || q==NULL){
    return false;
    }

    if(p->val==q->val){
    return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
    }else{
    return false;
    }
    }
    };