Third Exercise 對稱的二叉樹

2021-09-05 03:28:35 字數 2627 閱讀 2808

題目要求:請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。【**於劍指offer】

二叉樹是一種非常重要的資料結構,非常多其他資料結構都是基於二叉樹的基礎演變而來的。

對於二叉樹,有深度遍歷和廣度遍歷,深度遍歷有前序、中序以及後序三種遍歷方法,廣度遍歷即我們尋常所說的層次遍歷。

樹的定義本身就是遞迴,採用遞迴的方法去實現樹的三種遍歷不僅easy理解並且**非常簡潔,而對於廣度遍歷來說,須要其他資料結構的支撐。

採用非遞迴方法時,深度遍歷使用堆疊,廣度遍歷採用佇列。

基本思路:二叉樹是否對稱,只要採用前序、中序、後序、層次遍歷等任何一種遍歷方法,分為先左後右和先右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。

**實現

方法一採用遞迴法,為了在vs裡實現完整功能以便除錯,借用了重建二叉樹的**,也可以借用鍵盤輸入構建二叉樹的**。

#include

#include

struct treenode};

bool issymmetrical

(treenode* leftroot, treenode* rightroot)

return

false;}

bool issymmetrical

(treenode* proot)

treenode*

reconstructbinarytree

(std:

:vector pre, int pre_left, int pre_right, std:

:vector vin, int vin_left, int vin_right)

}return tree;

}treenode*

reconstructbinarytree

(std:

:vector pre, std:

:vector vin)

void

main()

; std:

:vector vin =

; tree =

reconstructbinarytree

(pre, vin)

; bool a =

issymmetrical

(tree);if

(a ==

true

) std:

:cout <<

"true"

<< std:

:endl;

else

std:

:cout <<

"false"

<< std:

:endl;

}

bool issymmetical(treenode* leftroot, treenode* rightroot)函式中**不精簡,討論中華科渣碩的**很精簡 。

//

bool issymmetrical

(treenode left, treenode right)

**實現

方法二採用非遞迴法,深度遍歷使用堆疊,廣度遍歷採用佇列,dfs bfs演算法以後再細學。

錯誤**(邏輯關係捋不順,不知何處返回邏輯值)

bool issymmetrical

(treenode* proot)

while

(left == right);}

else

if(proot-

>left ==

null

&& proot-

>right ==

null

)return

true

;else

return

false

;}

修正後**(或者定義乙個佇列,成對地出入佇列)

bool issymmetrical

(treenode* proot)

return

true

;//當遍歷完沒有不相等的情況時,即可確定該樹為對稱樹。

}

當定義乙個佇列成對壓入壓出時,要注意壓入的先後順序,一定要left->left、right->right成隊出入,其實兩個佇列也一樣,壓入left->left、right->right要並行處理。

queue.

push

(left-

>left)

; queue.

push

(right-

>right)

; queue.

push

(left-

>right)

; queue.

push

(right-

>left)

;

反思總結

對稱與反對稱

對稱與反對稱 時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 給出乙個n n的方陣a。構造方陣b,c 使得a b c.其中 b為對稱矩陣,c為反對稱矩陣。對於方陣s中的任意元素,若 s ij s ji,...

對稱與反對稱

對稱與反對稱 根據線代書上的說法,一定存在。如果a 1 2 a,a 2 1 b,那麼我們應該求的是 a b 2和 a b 2,為了使它們為整數,那麼應該求2的逆元,根據逆元線性篩,2對m的逆元為 mod mod 2 mod.include include include include includ...

Android Keystore 對稱 非對稱加密

android資料加密 anroid資料加密方式 android 提供了 keystore 等可以長期儲存和檢索加密金鑰的機制,android keystore 系統特別適合於儲存加密金鑰。它提供了限制何時以何種方式使用金鑰的方法,比如使用金鑰時需要使用者認證或限制金鑰只能在加密模式下使用。乙個應用...