记录 1 道算法题
相同的树
需要比较树的结构相等,值相等。
- 先玩个花的
在逛题解的时候看到个有趣的。JSON.stringify。
function isSameTree(p,q) {
return JSON.stringify(p) === JSON.stringify(q)
}
哈哈哈哈哈哈哈哈哈
- 深度优先
function isSameTree(p,q) {
// 都为空时不用比较
if (!q && !p) return tree
// 因为上面没进去,所以一定是有一个不是空
// 而这里进去了,意味着有一个是空,这时就是一空,一不空
if (!q || !p) return false
// 上面都没进去说明没有空的,比较值
if (q.val !== p.val) return false
// 递归处理
return isSameTree(p.left, q.left) &&
isSameTree(p.right, q.right)
}
- 广度优先
function isSameTree(p, q) {
// 处理传入空的情况
// 如果有一个是空就会进去
if (!p || !q) {
if (p || q) {
// 如果进去了说明有一个不是空,就矛盾了
return false
} else {
// 都是空
return true
}
}
const stack1 = [q]
const stack2 = [p]
while(stack1.length) {
let i = stack[1].length
while(i--) {
// 因为顺序不重要,所以可以倒着处理
const node1 = stack1.pop()
const node2 = stack2.pop()
if (node1.val !== node2.val) return false
// 进去说明有一个节点为空
if (!node1.left || !node2.left) {
// 当有一个不是空的时候,矛盾
if (node1.left || node2.left) return false
} else {
// 没有空节点
stack1.push(node1.left)
stack2.push(node2.left)
}
// 同上
if (!node1.right || !node2.right) {
if (node1.right || node2.right) return false
} else {
stack1.push(node1.right)
stack2.push(node2.right)
}
}
}
return true
}
结束