101 對稱二叉樹

2021-10-10 12:54:35 字數 1171 閱讀 2754

給定乙個二叉樹,檢查它是否是映象對稱的。

例如,二叉樹 [1,

2,2,

3,4,

4,3] 是對稱的。

1/ \ 2

2/ \ / \34

43但是下面這個 [1,

2,2,

null,3

,null,3

] 則不是映象對稱的:

1/ \

22\ \

33

方法一:遞迴

二叉樹的遍歷問題最容易想到的就是遞迴,因為子樹結構和整棵樹都一樣,可以用相同的方法遞迴遍歷。

根結點為空,直接返回true

根結點不為空,比較左右子樹。分三種情況:

左右子樹都為空,返回true。

左右子樹只有乙個為空,返回false。

當左右子樹都不為空,比較左右子樹的根結點是否相同,相同則分別遞迴比較左子樹的左子樹和右子樹的右子樹,左子樹的右子樹和右子樹的左子樹。只有三者都為true 時,才返回true。

var

issymmetric

=function

(root)

;return

iscommon

(root.left,root.right);}

;

複雜度分析

假設樹上一共 n 個節點。

方法二:迭代

首先我們引入乙個佇列,這是把遞迴程式改寫成迭代程式的常用方法。初始化時我們把左右子樹的根結點入隊。每次提取兩個結點並比較它們的值(佇列中每兩個連續的結點應該是相等的,而且它們的子樹互為映象),然後將兩個結點的左右子結點按相反的順序插入佇列中。當隊列為空時,或者我們檢測到樹不對稱(即從佇列中取出兩個不相等的連續結點)時,該演算法結束。

哪些情況不對稱:

var

issymmetric

=function

(root)

queue.

push

(left.left,right.right,left.right,right.left);}

return

true;}

;

複雜度分析

101 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。思路 遞迴就用dfs,迭代是b...

101 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。解題思路 對稱二叉樹可以理解...

101 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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 說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。使用輔助空間佇列 defi...