将一个二叉树逐行遍历,但是遍历方向逐行翻转
import time
from collections import defaultdict
class Node(object):
def __init__(self, value, left, right, depth):
self.value = value
self.left = left
self.right = right
self.depth = depth
rows = defaultdict(list)
def get_btree_node(node):
value = node.value
left = node.left
right = node.right
depth = node.depth
return value, left, right, depth
def get_btree_all(node):
global rows
v, l, r, d = get_btree_node(node)
rows[d].append(v)
if l is not None:
get_btree_all(l)
if r is not None:
get_btree_all(r)
n_i = Node(9, None, None, 3)
n_h = Node(8, None, None, 3)
n_f = Node(6, n_h, n_i, 2)
n_g = Node(7, None, None, 2)
n_e = Node(5, None, None, 2)
n_d = Node(4, None, None, 2)
n_b = Node(2, n_d, n_e, 1)
n_c = Node(3, n_f, n_g, 1)
n_a = Node(1, n_b, n_c, 0)
get_btree_all(n_a)
def loop_print(values, direction):
res_list = []
for k, v in values.items():
for i in v[::direction]:
res_list.append(i)
direction = -1 * direction
print(res_list)
loop_print(rows, 1)