题目:
Given two binary trees, 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 1:Input: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] Output: true
Example 2:
Input: 1 1 / \ 2 2 [1,2], [1,null,2] Output: false
Example 3:
Input: `1 1 / \ / \ `2 1 1 2 [1,2,1], [1,1,2] Output: false
解释:
判断两棵树是否一样。
最朴素的思想:因为中序遍历和前序遍历唯一确定一棵树,所以先对两棵树求中序遍历和前序遍历,如果两棵树的两种遍历结果完全一样,则是一样的树。
但是这种方法实在是太傻了!
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, q):
"""
:type p: TreeNode
:type q: TreeNode
:rtype: bool
"""
if p and q:
return p.val==q.val and self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
else:
return p==q
c++代码:
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p &&q)
return (p->val==q->val)&&isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
else
return p==q;
}
};
总结:
遇到树的问题,第一个想法还是递归,实在不行再比较遍历结果。