1.决策树(重点讨论二叉树)
以上图为例
广度遍历:013456789
深度遍历:
1.先序遍历,根左右:0137849256
2.中序遍历,左根右:7381940526
3.后序遍历,左右根:7839415620
class Node(object):#创建节点,包括根节点,左子节点,右子节点
def __init__(self, item):
self.elem = item
self.lchild = None
self.rchild = None
class Tree(object):#创建树
"""二叉树"""
def __init__(self):#令根节点为0
self.root = None
def add(self, item):#节点数据添加
node = Node(item)
if self.root is None:
self.root = node
return
queue = [self.root]
while queue:
cur_node = queue.pop(0)
if cur_node.lchild is None:
cur_node.lchild = node
return
else:
queue.append(cur_node.lchild)
if cur_node.rchild is None:
cur_node.rchild = node
return
else:
queue.append(cur_node.rchild)
def breadth_travel(self):
"""广度遍历"""
if self.root is None:
return
queue = [self.root]
while queue:
cur_node = queue.pop(0)
print(cur_node.elem, end=" ")
if cur_node.lchild is not None:
queue.append(cur_node.lchild)
if cur_node.rchild is not None:
queue.append(cur_node.rchild)
def preorder(self, node):
"""先序遍历"""
if node is None:
return
print(node.elem, end=" ")
self.preorder(node.lchild)
self.preorder(node.rchild)
def inorder(self, node):
"""中序遍历"""
if node is None:
return
self.inorder(node.lchild)
print(node.elem, end=" ")
self.inorder(node.rchild)
def postorder(self, node):
"""后序遍历"""
if node is None:
return
self.postorder(node.lchild)
self.postorder(node.rchild)
print(node.elem, end=" ")