德州网站怎样建设,做网站国内好的服务器,中国刚刚发生的新闻,网站需不需要备案涉及到递归#xff0c;最好多画图理解#xff0c;希望对你们有帮助 100.相同的树 题目 给你两棵二叉树的根节点 p 和 q #xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同#xff0c;并且节点具有相同的值#xff0c;则认为它们是相同的。 题目链接…涉及到递归最好多画图理解希望对你们有帮助 100.相同的树 题目 给你两棵二叉树的根节点 p 和 q 编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同并且节点具有相同的值则认为它们是相同的。 题目链接 力扣LeetCode官网 - 全球极客挚爱的技术成长平台 文字 和 画图 分析 思考递归进行的条件和结束的条件是什么列举递归可能会出现的情况 针对上面两个问题进行解答 要想找两个树的结构相同有点麻烦换个思路我们找它们不同 所以我们需要先对比两者的根节点再去对比左子树和右子树 [很明显我们采取的是 前序 遍历整个节点] 在递归的时候每一次根节点都发生变化只要根节点对应的数值不同 就返回 false 结束递归 (其中一种结束条件) 根节点相同我们无法判断是否两个树结构相同只能继续递归这是递归条件 递归期间我们还可能碰到以下情况 如上图我们遇到空树了 这里还需要分两种情况讨论 如果两个树在这个节点都是空则返回 true (这是其中一种结束条件) [注意我们是先对比根再对比左子树最后对比右子树所以只有左子树和右子树都为 true 才是一样的树] 如果两个树只有一个为空则返回 false (这是其中一种结束条件) 3. 判断的顺序问题 由于可能会遇到空树先比较根的大小明显是不行的所以应该把比较是否是空树的条件放前面 代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{if ((p NULL q ! NULL) || (p ! NULL q NULL)){return false;}if (p NULL q NULL){return true;}if (p-val ! q-val){return false;}return isSameTree(p-left, q-left) isSameTree(p-right, q-right);
}