100.相同的树

📅 2026/8/5 17:50:39
100.相同的树
目录一题目二思路三代码四递归展开图一题目解释两个树相同代表结构和值都要完全相同二思路两个指针各是对应树的根节点所以我们可以控制两个指针的行为一致也就是检查处于同一个位置的节点那么就应该优先判断是不是存在一方为空的情况一方为空代表结构不同直接false若两方都为空代表结构和值都相同则当前位置节点检测通过若两方都不为空但值不同则false所以只有两方不为空且值相同才代表当前节点检测通过才递归对二者孩子节点进行检测终止条件①两方都为空 ture②通过①代表不可能两方为空此时若一方为空fasle③两方不为空但值不同false递归条件通过①②③代表现在两方不为空且值相同则意味着两棵树的同样位置的这两个节点检查通过则进行递归往下处理取两个位置的左孩子进行检查 取右孩子进行检查三代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool isSameTree(struct TreeNode*p,struct TreeNode*q) { if(pNULL qNULL)//两个都为空 代表结构和值都相同 return true;//真 if(pNULL || qNULL)//一方为空 则结构不同 值都没有比较的意义 return false;//假 if(p-val ! q-val)//结构相同 但节点都不为空 则对比值 return false;//假 //来到这里 代表两棵树的当前节点 都存在 值都等 //则递归检查两个树的当前节点的左节点 且 当前节点的右节点 return isSameTree(p-left,q-left) isSameTree(p-right,q-right); }解释第一个if都为空所以为第二个if是通过第一个if的所以不可能两方为空此时若发现一方为空所以选择||第三个if是比较值所以!四递归展开图第一种模型总递归展开图左右第二种模型及其递归展开图 [ 作者 ] shylyly [ 首次发布 ] 2024.8.27❌ [ 最新修改 ] 2026.8.4 [ 声明 ] 由于笔者水平有限文中难免有疏漏或不妥之处还望读者不吝赐教