0
点赞
收藏
分享

微信扫一扫

python 二叉树遍历


python 二叉树遍历_python

"""
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)


举报

相关推荐

0 条评论