題目描述
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
思路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,...