對稱的二叉樹

2021-08-31 07:09:02 字數 1143 閱讀 1642

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

我們都知道樹的遍歷有三種,先序遍歷,中序遍歷,後序遍歷。在這三種遍歷演算法中,都是先遍歷左子節點再遍歷右子節點。以先序遍歷為列,我們可以定義乙個遍歷演算法,先遍歷右子節點再遍歷左子節點。我們稱之為前序遍歷的對稱遍歷。

以上面三棵樹為例,第一棵樹的前序遍歷結果, 對稱遍歷結果為。

第二棵樹的前序遍歷結果, 對稱遍歷結果為。

可以看到這種方法可以區分前兩棵樹,但是我們再看看第三棵樹

前序遍歷結果, 對稱遍歷結果為

我們的演算法就無法正確判斷第三棵樹,因此我們在遍歷的時候要考慮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...