成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇講明白對稱的二叉樹

開發(fā) 前端
如果一顆二叉樹和它的鏡像一樣,那么它就是對稱的。實現一個函數用于判斷一顆二叉樹是否對稱,你會怎么做?本文將分享一種解決方案,歡迎各位感興趣的開發(fā)者閱讀本文。

實現思路

二叉樹的鏡像中我們知道了此問題的解決方案是前序遍歷,那么我們可以修改下前序遍歷算法,父節(jié)點遍歷后,先遍歷它的右子節(jié)點,再遍歷它的左子節(jié)點,我們把這種算法稱為:對稱前序遍歷。

如下圖所示的兩棵樹,我們分別列舉下兩種遍歷的結果:

樹A:

  • 前序遍歷:8, 6, 5, 7, 6, 7, 5
  • 對稱前序遍歷:8, 6, 5, 7, 6, 7, 5

樹B:

  • 前序遍歷:8, 6, 5, 7, 9, 7, 5
  • 對稱前序遍歷:8, 9, 5, 7, 6, 7, 5

經過對比后,我們發(fā)現樹A的兩種遍歷方法得到的結果是一樣的,那么它就是對稱的;樹B的結果不同,它就不是對稱的。

圖片

如果有一顆不完全二叉樹,它的所有節(jié)點都相同,他是對稱的嗎?

圖片

針對于這種情況,我們就需要將它缺省的null節(jié)點進行補齊了,補齊后的兩種遍歷結果為:

  • 前序遍歷:7, 7, 7, null, null, 7, null, null, 7, 7, null, null, null
  • 對稱前序遍歷:7, 7, null, 7, null, null, 7, 7, null, null, 7, null, null

對比兩個結果后,我們發(fā)現并不一樣,那么它就不是對稱的。

圖片

實現代碼

  • 有了思路后,接下來我們看下代碼實現,如下所示:
  • 從樹的根節(jié)點出發(fā),遞歸比對它的左子節(jié)點和右子節(jié)點

比對過程中:

二者都到達葉子節(jié)點,代表這棵樹是對稱的

任意一方到達葉子結點,代表這棵樹不對稱

節(jié)點值不同,這棵樹不對稱

export function SymmetricBinaryTree(node: BinaryTreeNode | null): boolean {
return isSymmetrical(node, node);
}

function isSymmetrical(
node: BinaryTreeNode | null | undefined,
cloneNode: BinaryTreeNode | null | undefined
): boolean {
// 到達葉子節(jié)點,兩者都為nul代表節(jié)點相同
if (node == null && cloneNode == null) {
return true;
}
// 任意一方到達葉子節(jié)點,代表節(jié)點不同
if (node == null || cloneNode == null) {
return false;
}
// 節(jié)點值不同
if (node.key != cloneNode.key) {
return false;
}

// 分別比對樹的左子節(jié)點和右子節(jié)點
return (
isSymmetrical(node.left, cloneNode.right) &&
isSymmetrical(node.right, cloneNode.left)
);
}

接下來,我們以上個章節(jié)列舉的例子為例,將其帶入上述代碼,驗證下能否正確判斷,如下所示:

const tree: BinaryTreeNode = {
key: 8,
left: {
key: 6,
left: { key: 5 },
right: { key: 7 }
},
right: { key: 6, left: { key: 7 }, right: { key: 5 } }
};
const isSymmetric = SymmetricBinaryTree(tree);
console.log(tree, "是否為對稱二叉樹: ", isSymmetric);

圖片

示例代碼

本文所用代碼完整版請移步:

  • SymmetricBinaryTree
  • symmetricBinaryTree-test.ts
責任編輯:武曉燕 來源: 神奇的程序員
相關推薦

2021-12-17 14:26:58

二叉樹節(jié)點數量

2021-11-29 10:40:58

二叉樹鏡像節(jié)點

2020-04-27 07:05:58

二叉樹左子樹右子樹

2021-05-06 17:46:30

二叉樹數據結構

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-04-20 08:37:14

數據結構二叉樹

2021-04-28 20:12:27

數據結構創(chuàng)建

2024-08-07 09:02:51

2021-08-27 11:36:44

二叉樹回溯節(jié)點

2021-09-29 10:19:00

算法平衡二叉樹

2022-10-26 23:58:02

二叉樹數組算法

2020-09-23 18:25:40

算法二叉樹多叉樹

2013-07-15 16:35:55

二叉樹迭代器

2021-03-17 08:19:22

二叉樹LeetCode

2023-04-06 08:37:24

2021-12-05 18:25:12

二叉樹路徑節(jié)點

2021-09-15 07:56:32

二叉樹層次遍歷

2021-10-12 09:25:11

二叉樹樹形結構

2022-10-12 23:25:17

二叉樹父節(jié)點根節(jié)點

2021-03-22 08:23:29

LeetCode二叉樹節(jié)點
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人妖videosex高潮另类 | 一区二区三区av夏目彩春 | 亚洲国产成人精品在线 | 国产成人短视频在线观看 | 欧美极品少妇xxxxⅹ免费视频 | 国产精品女人久久久 | 日日天天| 夜夜爽99久久国产综合精品女不卡 | 国产精品一区二区三区在线 | 青青草中文字幕 | 日本大香伊一区二区三区 | 少妇一级淫片aaaaaaaaa | 天天看天天操 | 天天在线操 | 91午夜在线 | 激情欧美一区二区三区中文字幕 | 狠狠的操 | 美女精品一区 | 成人免费淫片aa视频免费 | av一级毛片| 久久色视频 | 国产xxxx岁13xxxxhd | 久久午夜影院 | 欧美mv日韩mv国产网站91进入 | 亚洲国产一区二区三区 | 国产精品a久久久久 | 精品日韩在线 | 成人在线小视频 | 高清免费在线 | 成人在线免费视频 | 中文字幕亚洲专区 | 中文字幕免费在线 | 欧美一区在线视频 | 毛片一级片 | 欧美日本久久 | 中文字幕第90页 | 一区二区播放 | 久久久久久久久久久丰满 | 久草福利 | 久久精品国产免费 | 9久久|