方法一:遞迴
對於此題: 遞迴的點怎麼找?從拿到題的第一時間開始,思路如下:
怎麼判斷一棵樹是不是對稱二叉樹? 答案:如果所給根節點,為空,那麼是對稱。如果不為空的話,當他的左子樹與右子樹對稱時,他對稱。
那麼怎麼知道左子樹與右子樹對不對稱呢?在這我直接叫為左樹和右樹。 答案:如果左樹的左孩子與右樹的右孩子對稱,左樹的右孩子與右樹的左孩子對稱,那麼這個左樹和右樹就對稱。
仔細讀這句話,是不是有點繞?怎麼感覺有乙個功能a我想實現,但我去實現a的時候又要用到a實現後的功能呢?
當你思考到這裡的時候,遞迴點已經出現了, 遞迴點:我在嘗試判斷左樹與右樹對稱的條件時,發現其跟兩樹的孩子的對稱情況有關係。
想到這裡,你不必有太多疑問,上手去按思路寫**,函式a(左樹,右樹)功能是返回是否對稱。
def 函式a(左樹,右樹): 左樹節點值等於右樹節點值 且 函式a(左樹的左子樹,右樹的右子樹),函式a(左樹的右子樹,右樹的左子樹)均為真才返回真。
class solution
public boolean check(treenode p, treenode q)
if (p == null || q == null)
return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
}}
leetcode 二叉樹 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...
對稱二叉樹c 對稱的二叉樹
很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...
對稱二叉樹
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。這題還是蠻簡單的。對稱二叉樹 include using namespace std struct treenode bool issymmetrical treenode proot1,t...