题解 | #判断二叉树是否相等#
判断二叉树是否相等
http://www.nowcoder.com/practice/9a9e74b71f944efab9992925f7f9a65e
1、题目描述(判断二叉树是否相等):
给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。
判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值。
1.1 示例1:
输入:{1},{1}
返回值:true
1.2 示例2:
输入:{1,2},{1,#,2}
返回值:false
2、解题思路:
很明显,这道题目考察的数据结构为树,对于一棵二叉树而言,它既有左子树,又有右子树,因此我们判断两颗二叉树相等的充分必要条件为:根节点的值相等且左右子树相等。
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param p TreeNode类 * @param q TreeNode类 * @return bool布尔型 */ bool isSameTree(TreeNode* p, TreeNode* q) { // write code here if(p == NULL && q == NULL) return true;//都为空则两个二叉树相等 if(p == NULL && q != NULL) return false; if(p != NULL && q == NULL) return false;//存在p或q一个为空,另一个不为空,则两个二叉树不相等 if(p->val != q->val) return false;//根节点值不相等,则两个二叉树不相等 else//根节点值相等 { if(isSameTree(p->left,q->left) && isSameTree(p->right,q->right))//同时两颗二叉树对应根节点的左子树和右子树都分别相等,则两颗二叉树相等 return true; return false; } } };