100

這一題是要比較兩棵樹是不是一模一樣,一模一樣的定義是結構要一樣、而且每個node的value也要一樣。從直觀上來想,就是要走過每一個node,判斷兩邊的node的value、left child跟right child都要一模一樣。

所以如果是要先比較兩棵樹的root node p跟q,就是先比較這兩者的value跟left, right child,如果都一樣,那就再判斷p->left跟q->left;p->right跟q->right一不一樣。只要有不一樣的地方就回傳false。

這樣想一想就已經有個大概的雛型了,接下來把程式的邏輯再想清楚一點。

  1. 如果兩個root都是NULL,表示兩者一樣,回傳true
  2. 如果其中一個是NULL,另一個不是,回傳false
  3. 如果兩個node的val不一樣,回傳false
  4. 再遞迴呼叫函式來比較node1->left,node1->right跟node2->left,node2->right

想清楚之後,實作出來就OK了。不過如果是要演練面試的話,應該還需要自己去測試一下程式碼有沒有問題:

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

        if(p->val != q->val)
            return false;

        if(isSameTree(p->left, q->left) == false || isSameTree(p->right, q->right) == false)
            return false;

        return true;   
    }
};

results matching ""

    No results matching ""