題目:請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
思路:
我們通常有三種不同的二叉樹遍歷演算法,即前序遍歷、中序遍歷和後序遍歷。在這三種遍歷演算法中,都是先遍歷左子結點再遍歷右子結點。以前序遍歷為例,我們可以定義乙個遍歷演算法,先遍歷右子結點再遍歷左子結點,暫且稱其為前序遍歷的對稱遍歷。
遍歷第一棵樹,前序遍歷的遍歷序列為,其對稱遍歷的遍歷序列為。
遍歷第二顆樹,前序遍歷的遍歷序列為,其對稱遍歷的遍歷序列為。
可以看到,使用此方法可以區分前兩棵樹,第一棵樹為對稱樹,第二顆樹不是對稱樹。但是當使用此方法,你會發現第三顆樹的前序遍歷和對稱前序遍歷的遍歷序列是一樣的。
怎麼區分第三顆樹呢?解決辦法就是我們也要考慮null指標。此時,前序遍歷的遍歷序列,其對稱遍歷的遍歷序列為。因為兩種遍歷的序列不同,因此這棵樹不是對稱樹。
class solution
bool issymmetrical(treenode* proot1,treenode* proot2)
};
注意:終止條件的順序不能更改。比如當條件三放在最上面時,當遞迴到最後,指標為null時,對空指標取null->val 顯然是錯誤的。 面試題28 對稱二叉樹
題目 請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。方法 遞迴 root1 的左子樹和 root2 的右子樹比較,root1 的右子樹和 root2 的左子樹比較,遞迴下去直到 root1 和 roo...
面試題28 對稱的二叉樹
思路 採用遞迴,先將樹分為兩株,即根節點的左子樹和柚子樹。然後利用函式,依次比較左子樹和柚子樹是否對稱 左子樹的左子樹是否等於柚子樹的柚子樹等條件 definition for a binary tree node.struct treenode class solution return isle...
面試題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...