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...