題目闡釋:
s型列印,重要的是將binary—tree 逐層遍歷,獲取每層的node。
思路:
將樹的遍歷轉化為 壓棧出棧。 每次將列表內的node全部出棧,獲取子元素,然後全部再入棧。 如此反覆迭代
應用:
當樹有層次資訊時候,可以如此操作。
**如下:
class node(object):
def __init__(self, val):
self.left_node = none
self.right_node = none
self.value = val
class makenode(object):
def __init__(self):
pass
def make_series(self, root_val, value_list_in):
root = node(root_val)
# cur_node=root
cur_nodes = list()
while cur_nodes:
nodes_iters = list()
while cur_nodes:
cur_node = cur_nodes.pop(0)
for node_iter in nodes_iters:
if value_list_in:
values_iter = value_list_in.pop(0)
if values_iter[0]:
node = node(values_iter[0])
node_iter.left_node = node
if values_iter[1]:
node = node(values_iter[1])
node_iter.right_node = node
# print(root)
return root
class binarytree(object):
def __init__(self):
pass
def stack(self,root):
nodes=[root]
flag=0
while nodes:
nodes_tmp=list()
while nodes:
# print('nodes_tmp==>',nodes_tmp)
if flag%2==0:
nodes_print=nodes_tmp
else:
nodes_print=nodes_tmp[::-1]
for val_node in nodes_print:
if val_node:
print(val_node.value)
for node_iter in nodes_tmp:
if node_iter:
# print(node_iter.value)
nodes.extend([node_iter.left_node,node_iter.right_node])
flag+=1
if __name__ == '__main__':
root = 1
values = [[2,3], [4, 5], [6, 7], [8, 9], [10, 11], [12, none], [none, 13]]
mn = makenode()
root=mn.make_series(root, values)
bt=binarytree()
bt.stack(root)
按層列印二叉樹
二叉樹是一種常見的資料結構,由n 你 0 個節點構成,每個節點最多有兩個子二叉樹。由二叉樹的定義可知,一棵二叉樹由三部分組成 根節點 左子樹和右子樹。二叉樹的遍歷方式有先序遍歷 中序遍歷和後序遍歷。先序遍歷 首先訪問根節點,然後訪問根節點左孩子,再訪問根節點的右孩子。中序遍歷 首先訪問根節點左孩子,...
按層列印二叉樹
從上到下按層列印二叉樹,同一層結點從左至右輸出,每一層輸出一行 思路 1 廣度遍歷,利用佇列思想 2 要有2個佇列,分別存放當前層的節點 和 下一層的節點 class node 節點類 def init self,val self.val val self.left none self.right ...
二叉樹3 二叉樹按層遍歷列印
題目 有一棵二叉樹,請設計乙個演算法,按照層次列印這棵二叉樹。給定二叉樹的根結點root,請返回列印結果,結果按照每一層乙個陣列進行儲存,所有陣列的順序按照層數從上往下,且每一層的陣列內元素按照從左往右排列。保證結點數小於等於500。思路 對於二叉樹,除了先序遍歷 中序遍歷 後序遍歷之外,常用的遍歷...