LeetCode——對稱二叉樹(JavaScript)
阿新 • • 發佈:2018-11-14
給定一個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹 [1,2,2,3,4,4,3]
是對稱的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面這個 [1,2,2,null,3,null,3]
則不是映象對稱的:
1
/ \
2 2
\ \
3 3
說明:
如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。
思路:
暫時只想到迭代法,以後想到遞迴再來更新。
這裡採用層序遍歷,將每一層的節點存入陣列,然後判斷這個陣列是否是對稱的。所有層都判斷完,若都對稱,返回true。
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {boolean} */ var isSymmetric = function(root) { if(!root) return true let queue = [root.left, root.right]; while (queue.length) { let len = queue.length; // 該層的節點數 let level = [] while (len) { // 將一層都加入level陣列 let pop = queue.shift(); // 出佇列元素 level.push(pop) if (pop) { queue.push(pop.left) queue.push(pop.right) } len-- } for (let i = 0, l = level.length; i < l/2; i++) { // 一個為null,一個不為null的情況 if (level[i] === null && level[l-i-1] !== null) return false if (level[i] !== null && level[l-i-1] === null) return false // 兩個都不是null的情況 if (level[i] !== null && level[l-i-1] !== null) { if (level[i].val !== level[l-i-1].val) return false } } } return true };