請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
我們都知道樹的遍歷有三種,先序遍歷,中序遍歷,後序遍歷。在這三種遍歷演算法中,都是先遍歷左子節點再遍歷右子節點。以先序遍歷為列,我們可以定義乙個遍歷演算法,先遍歷右子節點再遍歷左子節點。我們稱之為前序遍歷的對稱遍歷。
以上面三棵樹為例,第一棵樹的前序遍歷結果, 對稱遍歷結果為。
第二棵樹的前序遍歷結果, 對稱遍歷結果為。
可以看到這種方法可以區分前兩棵樹,但是我們再看看第三棵樹
前序遍歷結果, 對稱遍歷結果為
我們的演算法就無法正確判斷第三棵樹,因此我們在遍歷的時候要考慮null指標。這樣子得到的結果就變成如下所示:
和。可以看出如此就能正確判斷這課樹不是對稱數。
# -*- coding:utf-8 -*-
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
def issymmetrical(self, proot):
# write code here
if not proot:
return true
return self.compare(proot.left,proot.right)
def compare(self,p,q):
if p == none and q == none:
return true
if p == none or q == none:
return false
if p.val == q.val:
if self.compare(p.left,q.right ) and self.compare(p.right,q.left):
return true
return false
對稱二叉樹c 對稱的二叉樹
很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...
對稱二叉樹
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。這題還是蠻簡單的。對稱二叉樹 include using namespace std struct treenode bool issymmetrical treenode proot1,t...
對稱二叉樹
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。solution public class treenode 我們可以通過比較二叉樹的前序遍歷序列和對稱前序遍歷序列來判斷二叉樹是不是對稱的 public class solution bo...