最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python实现二叉树结构与进行二叉树遍历的方法详解

来源:动视网 责编:小采 时间:2020-11-27 14:16:57
文档

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 se
推荐度:
导读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 se
 二叉树的建立

使用类的形式定义二叉树,可读性更好

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('
')
 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('
')
 elif order == 'LNR':
 output.write('this is inorder traversal:')
 traversal(tree, order)
 output.write('
')
 else:
 output.write('this is postorder traversal:')
 traversal(tree, order)
 output.write('
')
 
 output.write('traversal level by level as below:'+'
')
 traversal_level_by_level(tree)
 
 print(output.getvalue())

更多Python实现二叉树结构与进行二叉树遍历的方法详解相关文章请关注PHP中文网!

文档

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 se
推荐度:
标签: 的方法 解析 结构
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top