佛山網(wǎng)站建設(shè)哪家公司好怎么創(chuàng)建網(wǎng)站鏈接
原題鏈接:
https://leetcode.cn/problems/cousins-in-binary-tree/
解題思路:
- 使用隊(duì)列進(jìn)行BFS搜索,同時(shí)保存每個(gè)節(jié)點(diǎn),以及其深度和父節(jié)點(diǎn)信息。
- 當(dāng)搜索到
x
和y
時(shí),對(duì)比深度和父節(jié)點(diǎn),如果滿足要求,則表示找到了堂兄弟節(jié)點(diǎn)。
/*** @param {TreeNode} root* @param {number} x* @param {number} y* @return {boolean}*/
var isCousins = function (root, x, y) {// 使用隊(duì)列進(jìn)行BFS搜索,每個(gè)元素保存的值是當(dāng)前節(jié)點(diǎn)、節(jié)點(diǎn)深度、父節(jié)點(diǎn)let queue = [[root, 1, null]]// 保存搜索到的x和y節(jié)點(diǎn)信息let result = []// 不斷搜索直到隊(duì)列被清空,表示完成了對(duì)二叉樹的搜索。while (queue.length) {// 將隊(duì)列元素出隊(duì),獲取相關(guān)信息const [node, depth, parent] = queue.shift()// 當(dāng)查找到x或y的值時(shí),將相應(yīng)的信息保存到resultif (node.val === x || node.val === y) {result.push([node, depth, parent])}// 如果result的長度為2,表示已查找到x和yif (result.length === 2) {// 如果x和y的深度相等,父節(jié)點(diǎn)不同,表示找到了堂兄弟節(jié)點(diǎn)if (result[0][1] === result[1][1] && result[0][2] !== result[1][2]) {return true}return false}// 將當(dāng)前節(jié)點(diǎn)的左右子節(jié)點(diǎn)入隊(duì),繼續(xù)搜索node.left && queue.push([node.left, depth + 1, node])node.right && queue.push([node.right, depth + 1, node])}
};