leetcode100題 題解 翻譯 C語言版 Python版

陳止風發表於2016-02-07

100. Same Tree

Given two binary trees, write a function to check if they are equal or not.

Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

100.相同的樹

給定兩棵二叉樹,寫一個函式來檢查他們是否相等

這裡說的兩棵二叉樹相等是指他們結構完全相同並且對應的結點有相同的值。


思路:用遞迴可快速解決問題。當比較兩棵樹的對應兩個結點時,如果他們的左子樹完全一樣,右子樹完全一樣,同時這兩個結點的值也一樣,那麼就可以得到兩個結點帶領的樹是完全一樣的了。由於存在一些結點有左子樹卻右子樹為空,或有右子樹卻左子樹為空,這樣在呼叫函式本身時會把NULL作為引數傳下去,所以遞迴的終點應該是比較的兩個結點指標值為空。如果兩個都是空,那就視為相同,返回true。而一個為空另一個不為空就視為不同,返回false,不用往下遞迴了。

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

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def isSameTree(self, p, q):
        """
        :type p: TreeNode
        :type q: TreeNode
        :rtype: bool
        """
        if p == None and q == None: return True
        if p == None or q == None: return False
        if p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right):
            return True
        else:
            return False



相關文章