劍指offer 28 對稱的二叉樹 C

2021-10-06 08:37:59 字數 1294 閱讀 6808

題目描述

請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。

思路1:利用劍指offer第27題二叉樹的映象。先得到二叉樹的映象,再判斷是否相同

class

solution

treenode*

clone

(treenode* proot)

void

mirror

(treenode* clonenode)

bool

issametree

(treenode* t1,treenode* t2)

return

false;}

};

思路2:從根節點的左右子樹開始判斷,若左子樹的左子樹與右子樹的右子樹相等,且左子樹的右子樹與右子樹的左子樹相等,就遞迴向下判斷各子樹

class

solution

bool

comroot

(treenode* left, treenode* right)

};

思路3:bfs 使用乙個指標佇列來儲存成對的節點,先進先出

class

solution

return

true;}

};

思路4:同思路3,使用棧來儲存成對的節點,先進後出

class

solution

return

true;}

};

【注!】本題給出一種 錯誤 思路,用例通過率只能90%

錯誤解法:判斷前序遍歷和後序遍歷是否互為逆。-》因為vector無法確定一棵樹的結構,例如,子節點不清楚具體在哪父節點上,比如:不是對稱二叉樹,但會被誤判為true!要注意。若要用這種方法,應該把nullptr也放入陣列!

class

solution

vector<

int>

preorder

(treenode* proot,vector<

int>

& prearr)

vector<

int>

lastorder

(treenode* proot, vector<

int>

& lastarr)

};

劍指offer 28對稱的二叉樹

題目 判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。思路分析 剛解答過27題,容易受上題影響,但大致思路是一致的 遞迴和迭代。舉乙個對稱的二叉樹例子可知,若二叉樹是對稱的,則其左子樹的左節點和其右子樹的右節點相等,左子樹的右節點和其右子樹的左節點相等。遞迴public b...

劍指 Offer 28 對稱的二叉樹

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。例如,二叉樹 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示例 1 輸入 root 1 2,2...

劍指 Offer 28 對稱的二叉樹

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。例如,二叉樹 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 示例 1 輸入 root 1,2,...