算法课第2周第1题——100. Same Tree

来源:互联网 发布:组态王软件代理 编辑:程序博客网 时间:2024/06/18 18:42

题目描述:

Given two binary trees, write a function to check if they are equal or not.

Two binary trees are considered equal if they are structurally identical and the nodes have the same value.


程序代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {public:bool isSameTree(TreeNode* p, TreeNode* q) {// 若其中一个为空,另一不为空,则不相同if ((p == NULL && q != NULL) || (p != NULL && q == NULL)) {return false;}// 若都为空,则相同else if (p == NULL && q == NULL) {return true;}// 若都不为空,比较节点值。节点值相同的情况下,对左右节点进行递归else {if (p->val != q->val) {return false;}else {return (isSameTree(p->left, q->left) && isSameTree(p->right, q->right));}}}};


简要题解:

本题是一道有关二叉树和递归的问题。本周所学的分治算法中常常用到递归,因此先通过本题再练习一下递归的使用。

要判断两个二叉树是否完全相同,首先要从根节点开始判断。第一种情况,若两树的根节点一个为空而另一个不为空,则两树不相同,返回false;第二种情况,若两树根节点都为空,则相同,返回true;第三种情况,若两树根节点都不为空,则判断根节点的值, 若值不同,则不相同,返回false, 若值相同,再进一步对左右节点进行判断。这里只需要分别对两树的左右节点调用isSameTree函数进行递归即可判断,若两树左右节点递归的值都为true,则两树完全相同,否则则不相同。

本题与分治算法有许多相似之处,通过本题我巩固了递归的使用。同时还复习了二叉树这一重要数据结构以及有关二叉树的一些算法。

0 0