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

来源:互联网 发布:sql数据库设计 编辑:程序博客网 时间:2024/06/08 01:49

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: trueExample 2:Input:     1         1          /           \         2             2        [1,2],     [1,null,2]Output: falseExample 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);        }    }}

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