概要
本文只實現了二叉樹基本的幾種遍歷,增、刪、改、查,預計明天寫完,後面的功能也儘量完善
定義Node資料結構
class Node(object):
def __init__(self, data):
self.data = data
self.lft = None #左節點
self.rgt = None #右節點
先序遍歷
class BTree(object):
def __init__(self):
self._root = None
self._size = 0
def preOrder(self):
```
先遍歷順序:
1,根節點
2,遍歷左子樹
3,遍歷右子樹
```
btree = []
def recurse(node):
if node != None:
btree.append(node.data)
recurse(node.lft)
recurse(node.rgt)
recurse(self._root)
return btree
中序遍歷
class BTree(object):
def __init__(self):
self._root = None
self._size = 0
# 中序遍歷
def inOrder(self):
```
中序遍歷順序:
1,遍歷左子樹
2,根節點
3,遍歷右子樹
```
btree = []
def recurse(node):
if node != None:
recurse(node.lft)
btree.append(node.data)
recurse(node.rgt)
recurse(self._root)
return btree
後序遍歷
class BTree(object):
def __init__(self):
self._root = None
self._size = 0
# 後序遍歷
def postOrder(self):
```
後序遍歷順序:
1,遍歷左子樹
2,遍歷右子樹
3,根節點
```
btree = []
def recurse(node):
if node != None:
recurse(node.lft)
recurse(node.rgt)
btree.append(node.data)
recurse(self._root)
return btree
層序遍歷
from collections import deque
class BTree(object):
def __init__(self):
self._root = None
self._size = 0
# 層序遍歷
def leverOrder(self):
q = deque()
q.append(self._root)
btree = []
while q:
#dque是一個雙向佇列,先進先出是popleft
node = q.popleft()
btree.append(node.data)
if node.lft:
q.append(node.lft)
if node.rgt:
q.append(node.rgt)
return btree
引用