75 lines
1.9 KiB
JavaScript
75 lines
1.9 KiB
JavaScript
/**
|
||
* Definition for a binary tree node.
|
||
* function TreeNode(val, left, right) {
|
||
* this.val = (val===undefined ? 0 : val)
|
||
* this.left = (left===undefined ? null : left)
|
||
* this.right = (right===undefined ? null : right)
|
||
* }
|
||
*/
|
||
/**
|
||
* https://leetcode.cn/problems/same-tree/?envType=study-plan-v2&envId=top-interview-150
|
||
* @param {TreeNode} p
|
||
* @param {TreeNode} q
|
||
* @return {boolean}
|
||
*/
|
||
const isSameTree = function (p, q) {
|
||
|
||
};
|
||
|
||
/*
|
||
如果一个树的字节的和另一个树的子节点相等,只要保证当前节点相等的话,
|
||
那么整棵树也就相等了
|
||
*/
|
||
|
||
function f1(p, q) {
|
||
if (p === null && q === null) return true;
|
||
if (p && q && p.val === q.val) {
|
||
return f1(p.left, q.left) && f1(p.right, q.right);
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/*
|
||
优化判断分支
|
||
*/
|
||
function f2(p, q) {
|
||
// 如果两个节点都为空,返回 true,表示当前节点相等
|
||
if (!p && !q) return true;
|
||
|
||
// 如果其中一个节点为空,或者节点值不相等,返回 false
|
||
if (!p || !q || p.val !== q.val) return false;
|
||
|
||
// 递归检查左右子树
|
||
return f1(p.left, q.left) && f1(p.right, q.right);
|
||
}
|
||
|
||
/*
|
||
通过BFS来判断两个数,每一层对应节点的值是否相等
|
||
*/
|
||
function f3(p, q) {
|
||
// 初步判断,如果两个树的根节点有一个为空,另一个不为空,则返回 false
|
||
if (!p && !q) return true;
|
||
if (!p || !q) return false;
|
||
// 上面这两个判断可有可无
|
||
|
||
const queue = [p, q]; // 队列存储两个树的根节点
|
||
|
||
while (queue.length > 0) {
|
||
const node1 = queue.shift();
|
||
const node2 = queue.shift();
|
||
|
||
if (!node1 && !node2) continue; // 如果两个节点都为空
|
||
|
||
// 如果两个节点值不同,或者其中一个为空,直接返回 false
|
||
if (!node1 || !node2 || node1.val !== node2.val) {
|
||
return false;
|
||
}
|
||
|
||
// 将左子节点和右子节点加入队列
|
||
queue.push(node1.left, node2.left);
|
||
queue.push(node1.right, node2.right);
|
||
}
|
||
|
||
return true;
|
||
}
|