二叉樹的先序遍歷

2021-09-27 15:14:48 字數 3170 閱讀 9683

description

給定一組輸入資料,要求按照該輸入資料構造一棵二叉樹並且使用非遞迴的先序遍歷演算法遍歷該二叉樹。ps:不能使用遞迴先序遍歷演算法,必須是非遞迴。

input

按照滿二叉樹的對應位置(即將輸入的元素層序按從根到葉節點,同層按從左到右輸入)輸入一串資料,資料型別可為整形或字元形式,例如:1 2 3 # 5 6 # # # 10 # # 13,以空格分開,其中#號代表對應的節點處為空,其對應的二叉樹為:

ps:遍歷輸出時所有空節點均不輸出;樹有可能為空(輸入為乙個"#")。

output

輸出先序遍歷的結果。

sample input 1

12 11 5 # # 17 16 # # # # 19 # 18

sample output 1

1211517

1916

18參考我另外一篇部落格:

構造二叉樹並實現訪問操作

不同的就是多了乙個pre_order

這裡使用棧來實現先序,不難理解,讀者自行閱讀即可

class

node

(object):

def__init__

(self, lchild=

none

, rchild=

none

, elem=0)

: self._elem, self._lchild, self._rchild = elem, lchild, rchild

@property

defelem

(self)

:if self._elem is

'#':

return

none

return self._elem

@property

deflchid

(self)

:return self._lchild

@property

defrchild

(self)

:return self._rchild

@elem.setter

defelem

(self, elem)

: self._elem = elem

@lchid.setter

deflchild

(self, lchild)

: self._lchild = lchild

@rchild.setter

defrchild

(self, rchild)

: self._rchild = rchild

class

bintree

(object):

def__init__

(self, elem=

none):

if elem is

notnone

: self.root = node(

none

,none

, elem)

else

: self.root =

none

def(self, elem)

:if self.root is

none

: self.root = node(

none

,none

, elem)

else

: queue =

[self.root]

while

len(queue)

>0:

cur = queue.pop(0)

if cur.lchild is

none

: cur.lchild = node(

none

,none

, elem)

return

elif cur.rchild is

none

: cur.rchild = node(

none

,none

, elem)

return

else

:def

layer_order

(self)

:if self.root is

none

:print

('none'

)else

: queue =

[self.root]

while queue:

node = queue.pop(0)

print

(node.elem)

if node.lchild is

notnone

:if node.rchild is

notnone

:def

pre_order

(self)

:if self.root is

none

:return

else

: stack =

[self.root]

result =

while stack:

cur = stack.pop(

)if cur and cur.elem:

return result

mytree = bintree(

)temp_list =

list

(input()

.split(

" ")

)for i in

range

(len

(temp_list)):

)# answer = list(map(int, mytree.pre_order()))

answer = mytree.pre_order(

)for i in

range

(len

(answer)):

print

(answer[i]

)

先序構建二叉樹及先序遍歷二叉樹

先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...

先序構建二叉樹及先序遍歷二叉樹

先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...

二叉樹的先序遍歷

二叉樹先序遍歷遵循 訪問根結點 遍歷其左子樹 遍歷其右子樹 簡單來說就是根 左樹 左樹的左樹 左樹的左樹的左樹 一直遍歷到沒有左樹為止 右樹 如果沒沒有右樹就往上 一直遍歷到右樹的右樹也沒有了 就結束了 class treenode object 初始化樹的 def init self,data 0...