【Day 14 】2021-05-23 - 100. 相同的树
题目描述
输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] 输出: true 输出: true 示例 2: 输入: 1 1 / \ 2 2 [1,2], [1,null,2] 输出: false 示例 3: 输入: 1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2]输出: false
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/same-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处
我的回答
解法一
时空复杂度
时间复杂度:O(n)
空间复杂度: O(1)
递归 把几种特殊情况判断下即可
var isSameTree = function (p, q) {
if (!q && !p) return true
if (!q || !p) {
return false
}
if (p.val === q.val) {
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
}
return false
};解法二
时间复杂度:O(n)
空间复杂度: O(2n)
层序遍历
var isSameTree = function (p, q) {
if (!q && !p) return true
if (!q || !p) return false
let PStack = [p]
let QStack = [q]
while (PStack.length || QStack.length) {
let pPop = PStack.pop()
let qPop = QStack.pop()
if (pPop.val !== qPop.val) return false
if (pPop.left && qPop.left) {
PStack.push(pPop.left)
QStack.push(qPop.left)
}
else if (!pPop.left && !qPop.left) { }
else if (!pPop.left || !qPop.left) return false
if (pPop.right && qPop.right) {
PStack.push(pPop.right)
QStack.push(qPop.right)
} else if (!pPop.right && !qPop.right) {
} else if (!pPop.right || !qPop.right) return false
}
return true
};