/*
 * @lc app=leetcode.cn id=100 lang=c
 *
 * [100] 相同的树
 *
 * https://leetcode-cn.com/problems/same-tree/description/
 *
 * algorithms
 * Easy (51.47%)
 * Total Accepted:    16K
 * Total Submissions: 31K
 * Testcase Example:  '[1,2,3]\n[1,2,3]'
 *
 * 给定两个二叉树,编写一个函数来检验它们是否相同。
 * 
 * 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
 * 
 * 示例 1:
 * 
 * 输入:       1         1
 * ⁠         / \       / \
 * ⁠        2   3     2   3
 * 
 * ⁠       [1,2,3],   [1,2,3]
 * 
 * 输出: true
 * 
 * 示例 2:
 * 
 * 输入:      1          1
 * ⁠         /           \
 * ⁠        2             2
 * 
 * ⁠       [1,2],     [1,null,2]
 * 
 * 输出: false
 * 
 * 
 * 示例 3:
 * 
 * 输入:       1         1
 * ⁠         / \       / \
 * ⁠        2   1     1   2
 * 
 * ⁠       [1,2,1],   [1,1,2]
 * 
 * 输出: 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){
        if(p -> val != q -> val) return false;        
        else{            
            return (isSameTree(p -> left, q -> left) && isSameTree(p -> right, q -> right)); 
                }    
            }    
    else   return false;
}

一般来说对树的操作,用递归法比较简单,第一个判断是否都为空,当都不为空的情况下判断值是否相等。不相等返回false。相等的话,进行递归,只有当左孩子和右孩子都满足条件的时候返回true,否则就是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

        """
        def issamenode(a,b):

            if a==None and b==None: return True

            if (a and b) == None: return False    #注意加括号

            if a.val !=b.val:

                return False

            return issamenode(a.left,b.left) and issamenode(a.right,b.right)

        return issamenode(p,q)