# LeetCode Easy 100. Same Tree
tags: leetcode
問題
2つの二分木を与えられた時に, それらが同じかどうかを調べる関数を書け
2つの二分木は構造的に同じでノードが同じ値を持っていたら同じとみなされる
解法(recursive)
二分木は再帰的なデータ構造を持つので再帰的に解くことをまずは考えます
以下, 同じときはtrue
, 違う時はfalse
とします
例外として根を持たないときを考えます
片方のみ根を持たないなら当然false
で両方とも持たないならtrue
です
計算量
ノードの数を$n$とします
Python
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: if p == None and q == None: return True elif p == None or q == None: return False if p.val == q.val: return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) else: return False
C++
/** * 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) { 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; } } };