python按照層序遍歷建立二叉樹 詳細注釋

2021-10-03 17:17:54 字數 2369 閱讀 8858

按照層序遍歷建樹是樹的基本操作之一。通常用建立佇列,逐層加入元素檢查某層是否滿,直到發現空位置的方法解決。本**增加一種輸入』#'字元的情況,表明該節點儲存的資料為空。

#構造二叉樹並實現訪問操作,輸入#代表樹中相應節點的資料是none

#本題的二叉樹是用層序構建的

#節點類

class node()

: def __init__

(self,elem =0)

: #節點儲存的資料,加_以便【用property新增私有屬性】

self._elem = elem

#左孩子

self.lchild = none

#右孩子

self.rchild = none

#property建立類中的_elem變數的乙個屬性:

#如果elem儲存#字元,那麼節點雖然存在,但儲存資料是空;否則,elem就儲存輸入的資料

@property

def elem

(self)

:if self._elem is '#'

:return none

return self._elem

#二叉樹類,包含新增元素和判斷樹是否存在的功能

class mytree()

:"""初始化二叉樹。沒有輸入根節點資料就建立空根節點,有輸入就建立相應資料的根節點"

"" def __init__

(self,root = none)

: self.root = root

#為樹新增節點,傳入引數為普通資料

def add

(self, elem)

: #將輸入轉化為節點,便於連線

node =

node

(elem)

# 如果樹根是空的,把這個節點放在根

if self.root == none:

self.root = node

#樹不空,需要逐層從左向右遍歷,直到找到空位置插入。

else

: #建立乙個佇列,佇列元素是節點。

queue =

[self.root]

#如果這個佇列中有東西,就要檢查這裡面的左右孩子節點是不是空的,如果不空的話加入佇列中

while queue:

# 每次操作的迴圈只彈出佇列第乙個元素,檢查。

#在還未遍歷完某層時,後乙個彈出元素是第乙個彈出元素的右側節點。

#遍歷完某層、確定這層的節點都非空後,才會從佇列彈出下一層的節點。

#檢查節點時,先檢查這個節點是不是空,順便將左右孩子加入佇列。

#以便以後發現當前檢查的層的節點全部非空時可以通過佇列進入下一層。

cur = queue.

pop(0)

#當前節點左孩子為空,待插節點就安在左孩子

if cur.lchild == none:

cur.lchild = node

#插入完成,不可繼續執行,退出函式

return

#左孩子不空,如果右孩子空,待插節點就安在右孩子

elif cur.rchild == none:

cur.rchild = node

#插入完成,不可繼續執行,退出函式

return

#上兩步都沒有return,說明左右都不空。

#此時需將當前位置節點左右孩子先後加入佇列中等待判斷。

else

: queue.

(cur.lchild)

queue.

(cur.rchild)

#測試if __name__==

'__main__'

: mytree =

mytree()

#輸入層序遍歷的列表,有'#'不轉化成int型別。

lista =

list

(input()

.split()

) #逐個將列表元素插入到樹中

for i in range

(len

(lista)):

mytree.

add(lista[i]

)#檢測程式,n為檢測操作語句的數量

n =int

(input()

)for i in range

(n):

#每次輸入乙個python語句,eval用來執行,輸入n次

eval

(input()

)

測試結果:

建立二叉樹,層序 先序遍歷

要求能夠輸入樹的各個結點,並能夠輸出用不同方法遍歷的遍歷序列 分別建立建立二叉樹儲存結構的的輸入函式 輸出層序遍歷序列的函式 輸出先序遍歷序列的函式 源 include include define max 20 typedef char telemtype typedef int status t...

前序遍歷 中序遍歷 後序遍歷 層序遍歷

根據遍歷畫圖 先根據中序和前序找到每一級的所有根 最近也是在準備筆試,由於沒有系統的學過資料結構,所以每次在考到二叉樹的遍歷的時候都是直接跪,次數多了也就怒了,前些天也是準備 沒時間整這些,現在提交了,算是稍微輕鬆點了,所以花了半天的時間來學了下二叉樹。現在記下來,以便後序查閱。一 二叉樹的遍歷概念...

層序遍歷(廣度優先遍歷)

遍歷複雜度o n include include using namespace std 二分搜尋樹 template typename key,typename value class bst node root 根節點 int count 樹中的節點個數 public 建構函式,預設構造一棵空二...