大家好,我是小卡皮巴拉
文章目录
目录
[力扣题目: 相同的树](#力扣题目: 相同的树)
[示例 1:](#示例 1:)
[示例 2:](#示例 2:)
[示例 3:](#示例 3:)
[兄弟们共勉 !!!](#兄弟们共勉 !!!)
每篇前言
博客主页:小卡皮巴拉
咱的口号:🌹小比特,大梦想🌹
作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。
力扣题目: 相同的树
原题链接: 相同的树
题目描述
给你两棵二叉树的根节点
p
和q
,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: p = [1,2,3], q = [1,2,3]
**输出:**true示例 2:
输入: p = [1,2], q = [1,null,2]
**输出:**false示例 3:
输入: p = [1,2,1], q = [1,1,2]
**输出:**false解题思路
题目理解
判断两棵二叉树是否完全相同,即结构相同且对应节点的值也相同。
算法选择
使用递归算法,因为递归能够自然地处理树结构的遍历。
具体思路
空树判断:
如果两棵树的根节点
p
和q
都为空,则它们相同,返回true
。如果其中一个为空,另一个不为空,则它们不相同,返回
false
。节点值比较:
如果两棵树的根节点都不为空,则比较它们的值。
如果值不相同,则它们不相同,返回
false
。递归比较子树:
如果两棵树的根节点值相同,则递归地比较它们的左子树和右子树。
使用
isSameTree
函数分别比较左子树和右子树,只有当两者都返回true
时,才认为整棵树相同。
解题要点
递归地处理树结构。
在每个递归步骤中,首先处理空树和节点值比较的基础情况。
然后递归地调用自身来比较子树。
完整代码(C语言)
cpptypedef struct TreeNode TreeNode; bool isSameTree(struct TreeNode* p, struct TreeNode* q) { if(p == NULL && q == NULL) { return true; } if(p == NULL || q == NULL) { return false; } //都不为空 if(p->val != q->val) { return false; } return isSameTree(p->left,q->left) && isSameTree(p->right,q->right); }
兄弟们共勉 !!!
码字不易,求个三连
抱拳了兄弟们!