"""
bitree.py 二叉树的简单实践
思路分析:
1.使用链式存储,一个node表示一个树的节点
2.节点考虑使用两个属性变量分别表示左连接和右连接
"""
from squeue import *
class Node:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preOrder(node):
"""
先序遍历
根左右
:param node:
:return:
"""
if node is None:
return
print(node.val, end=' ')
preOrder(node.left)
preOrder(node.right)
def inOrder(node):
"""
中序遍历
左根右
:param node:
:return:
"""
if node is None:
return
inOrder(node.left)
print(node.val, end=' ')
inOrder(node.right)
def postOrder(node):
"""
后续遍历
左右根
:param node:
:return:
"""
if node is None:
return
postOrder(node.left)
postOrder(node.right)
print(node.val , end=' ')
def levelOrder(node):
"""
层次遍历
让初始节点先入队,谁出兑就遍历谁,并且让它的左右孩子分别入队,直到队列为空
:param node:
:return:
"""
sq = SQueue()
sq.enqueue(node) # 初始节点入队
while not sq.is_empty():
node = sq.dequeue()
print(node.val,end='')
if node.left:
sq.enqueue(node.left)
if node.right:
sq.enqueue(node.right)
if __name__ == '__main__':
b = Node('b')
f = Node('f')
g = Node('g')
d = Node('d', f, g)
i = Node('i')
h = Node('h')
e = Node('e', i, h)
c = Node('c', d, e)
a = Node('a', b, c) # 根节点
print('先序排列列', end='')
levelOrder(a)
# bt = Bitree()
# bt.preOrder(a)
python 二叉树遍历
最新推荐文章于 2024-05-10 09:48:37 发布