|
1 | 1 | # -*- coding: utf-8 -*-
|
2 | 2 |
|
3 | 3 |
|
| 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 | + |
4 | 34 |
|
5 | 35 | class BinTreeNode(object):
|
6 | 36 | def __init__(self, data, left=None, right=None):
|
@@ -36,6 +66,19 @@ def preorder_trav(self, subtree):
|
36 | 66 | self.preorder_trav(subtree.left)
|
37 | 67 | self.preorder_trav(subtree.right)
|
38 | 68 |
|
| 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 | + |
39 | 82 | def inorder_trav(self, subtree):
|
40 | 83 | if subtree is not None:
|
41 | 84 | self.preorder_trav(subtree.left)
|
@@ -90,6 +133,8 @@ def layer_trav_use_queue(self, subtree):
|
90 | 133 | btree = BinTree.build_from(node_list)
|
91 | 134 | print('====先序遍历=====')
|
92 | 135 | btree.preorder_trav(btree.root)
|
| 136 | +print('====使用 stack 实现先序遍历=====') |
| 137 | +btree.preorder_trav(btree.root) |
93 | 138 | print('====层序遍历=====')
|
94 | 139 | btree.layer_trav(btree.root)
|
95 | 140 | print('====用队列层序遍历=====')
|
|
0 commit comments