Skip to content

Commit 5ea60df

Browse files
committed
preorder use stack emplicity
1 parent 24b4df4 commit 5ea60df

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

docs/14_树与二叉树/btree.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,36 @@
11
# -*- coding: utf-8 -*-
22

33

4+
from collections import deque
5+
6+
7+
class Queue(object): # 借助内置的 deque 我们可以迅速实现一个 Queue
8+
def __init__(self):
9+
self._items = deque()
10+
11+
def append(self, value):
12+
return self._items.append(value)
13+
14+
def pop(self):
15+
return self._items.popleft()
16+
17+
def empty(self):
18+
return len(self._items) == 0
19+
20+
21+
class Stack(object):
22+
def __init__(self):
23+
self._items = deque()
24+
25+
def push(self, value):
26+
return self._items.append(value)
27+
28+
def pop(self):
29+
return self._items.pop()
30+
31+
def empty(self):
32+
return len(self._items) == 0
33+
434

535
class BinTreeNode(object):
636
def __init__(self, data, left=None, right=None):
@@ -36,6 +66,19 @@ def preorder_trav(self, subtree):
3666
self.preorder_trav(subtree.left)
3767
self.preorder_trav(subtree.right)
3868

69+
def preorder_trav_use_stack(self, subtree):
70+
"""递归的方式其实是计算机帮我们实现了栈结构,我们可以自己显示的用栈来实现"""
71+
s = Stack()
72+
if subtree:
73+
s.push(subtree)
74+
while not s.empty():
75+
peek = s.pop()
76+
print(peek.data)
77+
if subtree.left:
78+
s.push(subtree.left)
79+
if subtree.right:
80+
s.push(subtree.right)
81+
3982
def inorder_trav(self, subtree):
4083
if subtree is not None:
4184
self.preorder_trav(subtree.left)
@@ -90,6 +133,8 @@ def layer_trav_use_queue(self, subtree):
90133
btree = BinTree.build_from(node_list)
91134
print('====先序遍历=====')
92135
btree.preorder_trav(btree.root)
136+
print('====使用 stack 实现先序遍历=====')
137+
btree.preorder_trav(btree.root)
93138
print('====层序遍历=====')
94139
btree.layer_trav(btree.root)
95140
print('====用队列层序遍历=====')

0 commit comments

Comments
 (0)