python二叉树的建立与遍历完整代码_如何使用Python语言实现二叉树结构与进行二叉树遍历...

本文主要向大家介绍了Python语言如何实现二叉树结构与进行二叉树遍历,通过具体的代码向大家展示,希望对大家学习Python语言有所帮助。class BinaryTree:

def __init__(self, root):

self.key = root

self.left_child = None

self.right_child = None

def insert_left(self, new_node):

if self.left_child == None:

self.left_child = BinaryTree(new_node)

else:

t = BinaryTree(new_node)

t.left_child = self.left_child

self.left_child = t

def insert_right(self, new_node):

if self.right_child == None:

self.right_child = BinaryTree(new_node)

else:

t = BinaryTree(new_node)

t.right_child = self.right_child

self.right_child = t

def get_right_child(self):

return self.right_child

def get_left_child(self):

return self.left_child

def set_root_val(self, obj):

self.key = obj

def get_root_val(self):

return self.key

r = BinaryTree('a')

print(r.get_root_val())

print(r.get_left_child())

r.insert_left('b')

print(r.get_left_child())

print(r.get_left_child().get_root_val())

r.insert_right('c')

print(r.get_right_child())

print(r.get_right_child().get_root_val())

r.get_right_child().set_root_val('hello')

print(r.get_right_child().get_root_val())

Python进行二叉树遍历

需求:

python代码实现二叉树的:

1. 前序遍历,打印出遍历结果

2. 中序遍历,打印出遍历结果

3. 后序遍历,打印出遍历结果

4. 按树的level遍历,打印出遍历结果

5. 结点的下一层如果没有子节点,以‘N'代替

方法:

使用defaultdict或者namedtuple表示二叉树

使用StringIO方法,遍历时写入结果,最后打印出结果

打印结点值时,如果为空,StringIO()写入‘N '

采用递归访问子节点

代码#!/usr/bin/env python3

# -*- coding: utf-8 -*-

# test tree as below:

''' 1 / \ / \ / \ / \ 2 3 / \ / \ / \ / \ 4 5 6 N / \ / \ / \ 7 N N N 8 9 / \ / \ / \ N N N N N N '''

from collections import namedtuple

from io import StringIO

#define the node structure

Node = namedtuple('Node', ['data', 'left', 'right'])

#initialize the tree

tree = Node(1,

Node(2,

Node(4,

Node(7, None, None),

None),

Node(5, None, None)),

Node(3,

Node(6,

Node(8, None, None),

Node(9, None, None)),

None))

#read and write str in memory

output = StringIO()

#read the node and write the node's value

#if node is None, substitute with 'N '

def visitor(node):

if node is not None:

output.write('%i ' % node.data)

else:

output.write('N ')

#traversal the tree with different order

def traversal(node, order):

if node is None:

visitor(node)

else:

op = {

'N': lambda: visitor(node),

'L': lambda: traversal(node.left, order),

'R': lambda: traversal(node.right, order),

}

for x in order:

op[x]()

#traversal the tree level by level

def traversal_level_by_level(node):

if node is not None:

current_level = [node]

while current_level:

next_level = list()

for n in current_level:

if type(n) is str:

output.write('N ')

else:

output.write('%i ' % n.data)

if n.left is not None:

next_level.append(n.left)

else:

next_level.append('N')

if n.right is not None:

next_level.append(n.right)

else:

next_level.append('N ')

output.write('\n')

current_level = next_level

if __name__ == '__main__':

for order in ['NLR', 'LNR', 'LRN']:

if order == 'NLR':

output.write('this is preorder traversal:')

traversal(tree, order)

output.write('\n')

elif order == 'LNR':

output.write('this is inorder traversal:')

traversal(tree, order)

output.write('\n')

else:

output.write('this is postorder traversal:')

traversal(tree, order)

output.write('\n')

output.write('traversal level by level as below:'+'\n')

traversal_level_by_level(tree)

print(output.getvalue())

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值