题解 | #牛群的相似结构#
牛群的相似结构
https://www.nowcoder.com/practice/ecaeef0d218440d295d9eff63fbc747c
考察的知识点:二叉树的递归与比较;
解答方法分析:
- 定义一个函数isSameTree,参数为两个TreeNode类型的指针p和q,返回一个布尔值。
- 在isSameTree函数中,首先判断p和q是否同时为空,即p和q都为nullptr的情况。如果是,返回true,表示这两个节点相同。
- 接下来判断其中一个节点为空而另一个节点不为空的情况,即p为空而q不为空,或者q为空而p不为空。如果存在这种情况,返回false,表示这两个节点不相同。
- 如果以上两判断都不满足,即p和q都不为空,那么再判断和q的值是否相等。如果值相等,继续判断节点的左子树和右子树是否相等。
- 递归调用isSameTree函数,将p的左子树和q的左子树作为参数,以及p的右子树和q的右子树作为参数。
- 最后,将左子树和右子树的结果进行逻辑与操作,如果都返回true,则说明整个树相同,返回true。否则返回false。
所用编程语言:C++;
完整编程代码:↓
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param p TreeNode类 * @param q TreeNode类 * @return bool布尔型 */ bool isSameTree(TreeNode* p, TreeNode* q) { if (p == nullptr && q == nullptr) return true; if (p == nullptr || q == nullptr) return false; if (p->val != q->val) return false; return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); } };