二叉樹實現按層 s型列印

2021-09-13 12:35:55 字數 1871 閱讀 2152

題目闡釋:

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。思路 對於二叉樹,除了先序遍歷 中序遍歷 後序遍歷之外,常用的遍歷...