題目描述
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
思路:1.首先根節點及其左右子樹,樹為空,true。
2.左孩子為空,判斷右孩子是否為空。
3.左孩子不為空,右孩子為空,false。
4.左,右孩子均不為空,但值不同,false。
5.左,右孩子均不為空,值相同,遞迴 左子樹的左子樹和右子樹的右子樹值相同,左子樹的右子樹和右子樹的左子樹值相同。
# -*- coding:utf-8 -*-
class treenode:
def __init__(self, x):
self.val = x
self.left = none
self.right = none
class solution:
def issymetrical(self, proot):
if not proot:
return true
return self.comroot(proot.left, proot.right)
def comroot(self, l, r):
if not l:
return r ==none
if not r:
return false # 執行到這表示左孩子不為空
if l.val != r.val: # 左右子樹均不為空,但值不同
return false
return self.comroot(l.left, r.right) and self.comroot(l.right, r.left)
或:
# -*- 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
return self.issymbt(proot,proot) **# 把根節點和左右節點統一考慮**
def issymbt(self,tree1,tree2): # 把根節點統一考慮
if tree1 == none and tree2 == none:
return true
if tree1 == none or tree2 == none:
return false
if tree1.val != tree2.val:
return false
return self.issymbt(tree1.left,tree2.right) and self.issymbt(tree1.right,tree2.left)
方法二:用stack或queue來訪問各級子樹根節點,dfs(深度優先)或bfs(廣度優先) 對稱二叉樹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...