一、题目描述:
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入:p = [1,2,3], q = [1,2,3]
输出:true
示例 2:
输入:p = [1,2], q = [1,null,2]
输出:false
引自:leetcode-cn.com/problems/sa…
题目链接:100. 相同的树
二、思路分析:
-
同时深度优先遍历 p 和 q, 一旦发现不同的值,就return false;
-
深度遍历过程中注意以下几点:
- p q 结点同时为空,返回 true;
- p q 中只有某一个结点为空,返回 false;
- p q 结点的值不相等,返回 true;
- 递归遍历 p q 结点的左子树、右子树是否相同。
三、AC 代码:
class Solution {
func isSameTree(_ p: TreeNode?, _ q: TreeNode?) -> Bool {
return dfsTree(p, q);
}
// 深度优先遍历
func dfsTree(_ p: TreeNode?, _ q: TreeNode?) -> Bool {
// p q 结点同时为空
if (p == nil && q == nil) {
return true;
}
// p q 中只有某一个结点为空
if (p == nil || q == nil) {
return false;
}
// p q 结点的值不相等
if (p?.val != q?.val) {
return false;
}
// 递归遍历 p q 结点的左子树、右子树是否相同
let leftFlag = dfsTree(p?.left, q?.left);
let rightFlag = dfsTree(p?.right, q?.right);
return leftFlag && rightFlag;
}
}
四、参考学习网址
本文正在参与「掘金 3 月闯关活动」, 点击查看 活动详情