007-100-判断两个二叉树是否相等 Same Tree

Question

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

Solution

与二叉树相关的问题可以用递归的思路来解决,对于这个问题,先判断两棵树的当前节点的值是否相等,如果相等,再判断两棵树的左子树、右子树分别是否相等,当左右子树都相等时(逻辑和关系),可以判断两棵树相等。还要考虑空树的情况,也就是空指针的情况。代码如下。

/**
 * 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 (p == q);
    }else{
        if(p->val != q->val){
            return false;
        }else{
            return isSameTree(p->left, q->left)&&isSameTree(p->right, q->right);
        }
    }
}

当用以比较的两个指针都为空时,则认为两个都是空数,即系相等;当其一为空,另一不为空时,可以判断两棵树不相等。

你可能感兴趣的:(数据结构与算法,leetcode,C)