1. 基于递归的前序遍历
代码实现如下:
# 二叉树的构建
class BinTree:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
# 操作函数
def count_Note(btree):
if btree == None:
return 0
else: # 递归求解
return 1 + count_Note(btree.left)\
+ count_Note(btree.right)
btree = BinTree(1, BinTree(2, BinTree(3)), BinTree(5, BinTree(6, BinTree(9))))
# 前序递归遍历
def traversal(btree):
if btree is not None and btree.data is not None: # 因为这里照顾到末尾元素是 None
print(btree.data)
traversal(btree.left)
traversal(btree.right)
traversal(btree)
2. 基于栈的非递归遍历
把该存入的元素先存入堆栈:利用栈来模拟递归
比较简单,代码如下:
# 创建树
class BinTree:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
btree = BinTree(1, BinTree(2, BinTree(3)), BinTree(5, BinTree(6, BinTree(9))))
# 创建堆栈
stack = [] # 这里用列表代替一下
# 基于栈的非递归前序遍历
def traversal(btree):
if btree is not None:
stack.append(btree)
while stack: # 整体框架如此,但是还有些具体的约束
btree = stack.pop()
if btree.data is not None:
print(btree.data)
if btree.right is not None:
stack.append(btree.right)
if btree.left is not None:
stack.append(btree.left)
traversal(btree)
3. 二叉树的层次遍历
利用队列实现层次遍历和利用栈的实现代码差不多,关键在于这两个缓存结构的不同
实现代码如下:
from queue import Queue
# 创建树
class BinTree:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
btree = BinTree(1, BinTree(2, BinTree(3)), BinTree(5, BinTree(6, BinTree(9))))
# 创建队列
queue = Queue()
# 基于栈的非递归前序遍历
def traversal(btree):
if btree is not None:
queue.put(btree)
while not queue.empty(): # 整体框架如此,但是还有些具体的约束
btree = queue.get()
if btree.data is not None:
print(btree.data)
else:
break
if btree.left is not None:
queue.put(btree.left)
if btree.right is not None:
queue.put(btree.right)
traversal(btree)