软件工程-基础课程-算法_树结构:二叉树、平衡树、堆、字典树.docx

软件工程-基础课程-算法_树结构:二叉树、平衡树、堆、字典树.docx

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE1

PAGE1

算法基础

1叉树的定义与性质

二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树的定义可以形式化为:

二叉树是一个有限节点的集合,这个集合或者为空,或者由一个根节点和两个互不相交的、分别称为左子树和右子树的二叉树组成。

二叉树的性质包括:

深度:二叉树的深度是指从根节点到最远叶子节点的最长路径上节点的数量。

高度:二叉树的高度是指从根节点到最远叶子节点的最长路径的边数。

满二叉树:在满二叉树中,所有层的节点数都达到最大值,即第i层有2^(i-1)个节点。

完全二叉树:在完全二叉树中,除了最后一层,其他层都是满的,且最后一层的节点都靠左排列。

平衡二叉树:平衡二叉树是一种特殊的二叉树,其中任意节点的左右子树的高度差不超过1。

1.1示例代码:二叉树的定义

classTreeNode:

定义二叉树的节点

def__init__(self,value=0,left=None,right=None):

self.value=value

self.left=left

self.right=right

#创建一个简单的二叉树

root=TreeNode(1)

root.left=TreeNode(2)

root.right=TreeNode(3)

root.left.left=TreeNode(4)

root.left.right=TreeNode(5)

2叉树的遍历方法:前序、中序、后序与层次遍历

二叉树的遍历是指按照某种顺序访问树中的所有节点,确保每个节点被访问一次。主要的遍历方法有前序遍历、中序遍历、后序遍历和层次遍历。

2.1前序遍历

前序遍历的顺序是:根节点-左子树-右子树。

2.1.1示例代码:前序遍历

defpreorder_traversal(node):

前序遍历

ifnodeisNone:

return[]

return[node.value]+preorder_traversal(node.left)+preorder_traversal(node.right)

#使用前序遍历

print(preorder_traversal(root))#输出:[1,2,4,5,3]

2.2中序遍历

中序遍历的顺序是:左子树-根节点-右子树。

2.2.1示例代码:中序遍历

definorder_traversal(node):

中序遍历

ifnodeisNone:

return[]

returninorder_traversal(node.left)+[node.value]+inorder_traversal(node.right)

#使用中序遍历

print(inorder_traversal(root))#输出:[4,2,5,1,3]

2.3后序遍历

后序遍历的顺序是:左子树-右子树-根节点。

2.3.1示例代码:后序遍历

defpostorder_traversal(node):

后序遍历

ifnodeisNone:

return[]

returnpostorder_traversal(node.left)+postorder_traversal(node.right)+[node.value]

#使用后序遍历

print(postorder_traversal(root))#输出:[4,5,2,3,1]

2.4层次遍历

层次遍历是从根节点开始,先访问同一层的所有节点,然后依次访问下一层的节点。

2.4.1示例代码:层次遍历

fromcollectionsimportdeque

deflevel_order_traversal(node):

层次遍历

ifnodeisNone:

return[]

queue=deque([node])

result=[]

whilequeue:

current_node=queue.popleft()

result.append(current_node.value)

ifcurrent_node.left:

queue.append(current_node.l

您可能关注的文档

文档评论(0)

kkzhujl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档