标签:not back 原则 中间 pre queue tree root forward
python实现二叉树的结构:
二叉树的遍历:
#封装一个节点对象
class Node(object):
def __init__(self,item):
self.item = item
self.left = None
self.right = None
class Tree(object):
def __init__(self):#构造出一颗空的二叉树
self.root = None #root指向第一个节点的地址,如果root指向了None,则该二叉树为空
#向二叉树中插入节点
def addNode(self,item):
node = Node(item)
if self.root == None:
#addNode如果第一次被调用则意味着:向空树中插入第一个节点,该节点一定是该树的根节点
self.root = node
return
cur = self.root
queue = [cur]
while queue:
n = queue.pop(0)
if n.left != None:
queue.append(n.left)
else:
n.left = node
break
if n.right != None:
queue.append(n.right)
else:
n.right = node
break
def travel(self):
"""广度遍历"""
#如果是为空则
if self.root == None:
print('空!')
return
#树为非空
cur = self.root
queue = [cur]
while queue:
n = queue.pop(0)
print(n.item)
if n.left != None:
queue.append(n.left)
if n.right != None:
queue.append(n.right)
def forward(self,root):
"""前序(根左右)"""
if root == None: # 递归结束条件
return
print(root.item)
self.forward(root.left) # 递归,本行代码结束才会执行下一行代码
self.forward(root.right)
def middle(self, root):
"""中序(左根右)"""
if not root:
return
self.middle(root.left) # 递归,将root变为左叶子节点的根
print(root.item, end='')
self.middle(root.right)
def back(self, root):
"""后序(左右后)"""
if not root:
return
self.back(root.left)
self.back(root.right)
print(root.item)
插入节点的时候一定要遵从的原则:比根节点小的节点同一插入在树的左侧,比根节点大的节点同一插在数据的右侧
构建排序二叉树
class Node(object):
def __init__(self,item):
self.item = item
self.left = None
self.right = None
class sort(object):
class SortTree():
def __init__(self):
self.root = None
def insertNode(self,item):
node = Node(item)
#向空树中插入第一个节点的情况
if self.root == None:
self.root = node
return
#树为非空的情况
cur = self.root
while True:
if node.item > cur.item:#往右插
if cur.right == None:
cur.right = node
break
else:
cur = cur.right
else:#往左插
if cur.left == None:
cur.left = node
break
else:
cur = cur.left
def middleTravel(self,root): # 只有中序才能将排序二叉树中的节点数据按顺序读出
if root == None:
return
self.middle(root.left)
print(root.item)
self.middle(root.right)
标签:not back 原则 中间 pre queue tree root forward
原文地址:https://www.cnblogs.com/bigox/p/11626556.html