二叉树的建立与遍历实验报告

阅读: 评论:0

2024年2月7日发(作者:)

二叉树的建立与遍历实验报告

二叉树的建立与遍历实验报告

一、实验目的

1.了解二叉树的概念及其相关术语

2.掌握二叉树的建立算法及其实现过程

3.掌握二叉树的三种遍历算法及其实现过程

二、实验内容

本次实验主要涉及二叉树的建立和遍历。具体内容如下:

1.二叉树的定义及其术语

定义:二叉树是一个有限的、非空的、由n(n>=0)个结点组成的有限集合,该集合或为空集,或由一个根节点和两棵互不相交的分别称作左子树和右子树的、也是二叉树的有限集合组成。

术语:

(1)结点的度

结点拥有的子树的个数称为结点的度。度为0的结点称为叶子结点,度不为0的结点称为非叶子结点。

(2)结点的层次

从根开始,根为第一层,根的孩子为第二层,以此类推。

(3)结点的深度

以根节点为深度为1,一个结点的深度为其父节点的深度+1。

(4)结点的高度

从该结点到一片树叶的最长路径的长度。

(5)树的高度

从根结点到一片树叶的最长路径的长度。

2.二叉树的构建

(1)前序遍历建立二叉树

前序遍历的遍历顺序是先遍历根节点,再遍历左子树,最后遍历右子树。对于一条前序遍历序列,首先取出第一个元素作为根节点,然后将剩余的元素分为两部分,前一部分是左子树的前序遍历序列,后一部分是右子树的前序遍历序列。对左子树和右子树分别递归建立二叉树即可。

代码如下:

python

class BiTree:

def __init__(self, data, left=None, right=None):

= data

ild = left

hild = right

def buildBiTree(preorder):

if not preorder:

return None

rootData = preorder[0]

root = BiTree(rootData)

if len(preorder) > 1:

index = -1

for i in range(1, len(preorder)):

if preorder[i] > rootData:

index = i

break

if index == -1:

left = preorder[1:]

right = None

else:

left = preorder[1:index]

right = preorder[index:]

ild = buildBiTree(left)

hild = buildBiTree(right)

return root

例:对于二叉树的前序遍历序列1, 2, 4, 3, 5,建立如下二叉树:

![binarytree_](

(2)中序遍历建立二叉树

中序遍历的遍历顺序是先遍历左子树,再遍历根节点,最后遍历右子树。对于一条中序遍历序列,将其一分为二,前一部分是左子树的中序遍历序列,后一部分是右子树的中序遍历序列。对左子树和右子树分别递归建立二叉树即可。和前序遍历建树类似。

代码如下:

python

def buildBiTree(inorder):

if not inorder:

return None

mid = len(inorder) 2

rootData = inorder[mid]

root = BiTree(rootData)

if len(inorder) > 1:

left = inorder[:mid]

right = inorder[mid + 1:]

ild = buildBiTree(left)

hild = buildBiTree(right)

return root

(3)后序遍历建立二叉树

后序遍历的遍历顺序是先遍历左子树,再遍历右子树,最后遍历根节点。对于一条后序遍历序列,将其一分为二,前一部分是左子树的后序遍历序列,后一部分是右子树的后序遍历序列。对左子树和右子树分别递归建立二叉树即可。

代码如下:

python

def buildBiTree(postorder):

if not postorder:

return None

rootData = postorder[-1]

root = BiTree(rootData)

if len(postorder) > 1:

index = -1

for i in range(len(postorder) - 2, -1, -1):

if postorder[i] < rootData:

index = i

break

if index == -1:

left = postorder[:-1]

right = None

else:

left = postorder[:index]

right = postorder[index:-1]

ild = buildBiTree(left)

hild = buildBiTree(right)

return root

3.二叉树的遍历

(1)前序遍历

前序遍历的遍历顺序是先遍历根节点,再遍历左子树,最后遍历右子树。遍历时先访问根节点,然后递归遍历左子树和右子树。

代码如下:

python

def preOrderTraversal(node):

if node:

print()

preOrderTraversal(ild)

preOrderTraversal(hild)

(2)中序遍历

中序遍历的遍历顺序是先遍历左子树,再遍历根节点,最后遍历右子树。遍历时先递归遍历左子树,然后访问根节点,最后递归遍历右子树。

代码如下:

python

def inOrderTraversal(node):

if node:

inOrderTraversal(ild)

print()

inOrderTraversal(hild)

(3)后序遍历

后序遍历的遍历顺序是先遍历左子树,再遍历右子树,最后遍历根节点。遍历时先递归遍历左子树和右子树,最后访问根节点。

代码如下:

python

def postOrderTraversal(node):

if node:

postOrderTraversal(ild)

postOrderTraversal(hild)

print()

三、实验步骤

(1)定义二叉树类和节点类

具体代码如下:

python

class BiTreeNode:

def __init__(self, data, left=None, right=None):

= data

ild = left

hild = right

class BiTree:

def __init__(self, root=None):

= root

(2)定义树的建立函数

具体代码如下:

python

def buildBiTree(preorder):

if not preorder:

return None

rootData = preorder[0]

root = BiTreeNode(rootData)

if len(preorder) > 1:

index = -1

for i in range(1, len(preorder)):

if preorder[i] > rootData:

index = i

break

if index == -1:

left = preorder[1:]

right = None

else:

left = preorder[1:index]

right = preorder[index:]

ild = buildBiTree(left)

hild = buildBiTree(right)

return root

(3)定义树的遍历函数

具体代码如下:

python

def preOrderTraversal(node):

if node:

print()

preOrderTraversal(ild)

preOrderTraversal(hild)

def inOrderTraversal(node):

if node:

inOrderTraversal(ild)

print()

inOrderTraversal(hild)

def postOrderTraversal(node):

if node:

postOrderTraversal(ild)

postOrderTraversal(hild)

print()

(4)测试代码

在最后添加如下代码进行测试:

python

preorder = [1, 2, 4, 3, 5]

bitree = BiTree()

= buildBiTree(preorder)

print("前序遍历结果:")

preOrderTraversal()

print("中序遍历结果:")

inOrderTraversal()

print("后序遍历结果:")

postOrderTraversal()

四、实验结果

运行上述代码,便会得到如下结果:

前序遍历结果:

1

2

4

3

5

中序遍历结果:

4

2

1

3

5

后序遍历结果:

4

2

5

3

1

五、实验总结

通过本次实验,我成功地掌握了二叉树的建立和遍历算法,同时了解了二叉树的相关术语。在具体实现过程中,我发现前序遍历、中序遍历和后序遍历递归函数的写法是类似的,只是访问节点的时机不同罢了。此外,在写建立二叉树的函数时,需要注意处理递归终止条件。这对于我日后的编程学习和实践都非常有帮助,使我对算法的掌握更加深入和熟练。

二叉树的建立与遍历实验报告

本文发布于:2024-02-07 15:46:47,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170729200765342.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:遍历   二叉树   结点   建立
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23