数据结构ch6树与二叉树
- 格式:ppt
- 大小:3.10 MB
- 文档页数:8
第六章树和二叉树一.选择题1. 以下说法错误的是。
A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构2. 如图6-2所示的4 棵二叉树中,不是完全二叉树。
图6-2 4 棵二叉树3. 在线索化二叉树中,t 所指结点没有左子树的充要条件是。
A. t->left == NULLB. t->ltag==1C. t->ltag==1 且t->left==NULL D .以上都不对4. 以下说法错误的是。
A.二叉树可以是空集B.二叉树的任一结点最多有两棵子树C.二叉树不是一种树D.二叉树中任一结点的两棵子树有次序之分5. 以下说法错误的是。
A.完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达B.在三叉链表上,二叉树的求双亲运算很容易实现C.在二叉链表上,求根,求左、右孩子等很容易实现D.在二叉链表上,求双亲运算的时间性能很好6. 如图6-3所示的4 棵二叉树,是平衡二叉树。
图6-3 4 棵二叉树7. 如图6-4所示二叉树的中序遍历序列是。
A. abcdgefB. dfebagcC. dbaefcgD. defbagc图6-4 1 棵二叉树8. 已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是。
A. acbedB. decabC. deabcD. cedba9. 如果T2 是由有序树T 转换而来的二叉树,那么T 中结点的前序就是T2 中结点的。
A. 前序B.中序C. 后序D. 层次序10. 某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是。
A. bdgcefhaB. gdbecfhaC. bdgaechfD. gdbehfca11. 将含有83个结点的完全二叉树从根结点开始编号,根为1号,后面按从上到下、从左到右的顺序对结点编号,那么编号为41的双亲结点编号为。
树与二叉树的相关概念、特点
树与二叉树是数据结构中常见的两种类型。
树是一种非线性的数据结构,由若干个节点组成。
每个节点都可以连接到多个子节点,形成分层结构。
树中有一个特殊的节点,称为根节点,用于表示整个树的起始点。
树的节点之间的关系是具有层次性的,即一个节点可以有多个子节点,但每个节点只能有一个父节点(除了根节点)。
二叉树是一种特殊的树结构,每个节点最多只能有两个子节点,分别称为左子节点和右子节点。
二叉树可以为空,此时表示为空树。
二叉树的子节点有左右之分,可以用于表示有序关系的数据结构,例如二叉查找树。
二叉树可以前序、中序和后序遍历,分别表示以根节点为中心,先处理根节点、先处理左子树和先处理右子树。
树与二叉树的特点包括:
1. 树和二叉树都是非线性结构,可以表示复杂的关系。
2. 树和二叉树都采用层次性的结构,节点之间有明确的父子关系。
3. 树中的节点可以拥有任意多个子节点,而二叉树中的节点最多只能有两个子节点。
4. 二叉树的左子节点和右子节点之间是有序的,可以用于实现查找等操作。
5. 二叉树可以方便地进行前序、中序和后序遍历操作,对数据的处理更加灵活。
6. 树和二叉树在实际应用中有广泛的应用,如数据库索引、文件系统、组织结构等。
第6章树和二叉树6.1 知识点概述树(Tree)形结构是一种很重要的非线性结构,它反映了数据元素之间的层次关系和分支关系。
在计算机科学中具有广泛的应用。
1、树的定义树(Tree)是n(n≥0)个数据元素的有限集合。
当n=0时,称这棵树为空树。
在一棵非空树T中:(1)有一个特殊的数据元素称为树的根结点,根结点没有前驱结点。
(2)若n>1,除根结点之外的其余数据元素被分成m(m>0)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。
树T1,T2,…,Tm称为这个根结点的子树。
2、树的基本存储结构(1)双亲表示法由于树中的每一个结点都有一个唯一确定的双亲结点,所以我们可用一组连续的存储空间(即一维数组)存储树中的结点。
每个结点有两个域:一个是data域,存放结点信息,另一个是parent域,用来存放双亲的位置(指针)。
(2)孩子表示法将一个结点所有孩子链接成一个单链表形,而树中有若干个结点,故有若干个单链表,每个单链表有一个表头结点,所有表头结点用一个数组来描述这种方法通常是把每个结点的孩子结点排列起来,构成一个单链表,称为孩子链表。
(3)双亲孩子表示法双亲表示法是将双亲表示法和孩子表示法相结合的结果。
其仍将各结点的孩子结点分别组成单链表,同时用一维数组顺序存储树中的各结点,数组元素除了包括结点本身的信息和该结点的孩子结点链表的头指针之外,还增设一个域,存储该结点双亲结点在数组中的序号。
(4)孩子兄弟表示法这种表示法又称为树的二叉表示法,或者二叉链表表示法,即以二叉链表作为树的存储结构。
链表中每个结点设有两个链域,分别指向该结点的第一个孩子结点和下一个兄弟(右兄弟)结点。
3、二叉树的定义二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。
当集合为空时,称该二叉树为空二叉树。
数据结构之树和⼆叉树⼀树1 什么是树树状图是⼀种,它是由n(n>=1)个有限节点组成⼀个具有层次关系的。
把它叫做“树”是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。
它具有以下的特点:每个节点有零个或多个⼦节点;没有⽗节点的节点称为根节点;每⼀个⾮根节点有且只有⼀个⽗节点;除了根节点外,每个⼦节点可以分为多个不相交的⼦树;树(tree)是包含n(n>0)个结点的有穷集,其中:(1)每个元素称为结点(node);(2)有⼀个特定的结点被称为根结点或树根(root)。
(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每⼀个集合Ti(1<=i<=m)本⾝也是⼀棵树,被称作原树的⼦树(subtree)。
2 相关术语节点的度:⼀个节点含有的⼦树的个数称为该节点的度;叶节点或终端节点:度为0的节点称为叶节点;⾮终端节点或分⽀节点:度不为0的节点;双亲节点或⽗节点:若⼀个节点含有⼦节点,则这个节点称为其⼦节点的⽗节点;孩⼦节点或⼦节点:⼀个节点含有的⼦树的根节点称为该节点的⼦节点;兄弟节点:具有相同⽗节点的节点互称为兄弟节点;树的度:⼀棵树中,最⼤的节点的度称为树的度;节点的层次:从根开始定义起,根为第1层,根的⼦节点为第2层,以此类推;树的⾼度或深度:树中节点的最⼤层次;堂兄弟节点:双亲在同⼀层的节点互为堂兄弟;节点的祖先:从根到该节点所经分⽀上的所有节点;⼦孙:以某节点为根的⼦树中任⼀节点都称为该节点的⼦孙。
森林:由m(m>=0)棵互不相交的树的集合称为森林;3 树模拟⽂件系统⽰例class Node:def__init__(self, name, type='dir'): = nameself.type = type # "dir" or "file"self.children = []self.parent = Nonedef__repr__(self):return class FileSystemTree:def__init__(self):self.root = Node("/")self.now = self.root # 当前⽬录def mkdir(self, name):# name已/结尾的⽂件夹if name[-1] != "/":name += "/"node = Node(name)self.now.children.append(node)node.parent = self.nowdef ls(self):return self.now.childrendef cd(self, name):if name[-1] != "/":name += "/"if name == "../":self.now = self.now.parentreturnfor child in self.now.children:if == name:self.now = childreturnraise ValueError("invalid dir")tree = FileSystemTree()tree.mkdir("var/")tree.mkdir("bin/")tree.mkdir("usr/")print(tree.root.children)print(tree.ls())tree.cd('bin/')tree.mkdir('python/')print(tree.ls())tree.cd("../")print(tree.ls())⼆、⼆叉树⼆叉树的链式存储:将⼆叉树的节点定义为⼀个对象,节点之间通过类似链表的链接⽅式来连接* 度不超过2的树* 每个节点最多有两个孩⼦节点* 两个孩⼦节点被区分为左孩⼦节点和右孩⼦节点满⼆叉树:⼀个⼆叉树如果每⼀个层的节点数达到最⼤值,则这个⼆叉树就是满⼆叉树完全⼆叉树:叶节点只能出现在最下层和次下层,并且最下⾯⼀层的节点都集中在该层最左边的若⼲位置的⼆叉树⼆叉树的遍历⽅式:前序遍历: EACBDGF中序遍历: ABCDEGF后序遍历: BDCAFGE层次遍历: EAGCFBDfrom collections import dequeclass BiTreeNode:def__init__(self, data):self.data = dataself.lchild = Noneself.rchild = Nonedef level_order(root):queue = deque()queue.append(root)while len(queue) > 0: # 只要栈不空node = queue.popleft()print(node.data, end=',')if node.lchild:queue.append(node.lchild)if node.rchild:queue.append(node.rchild)root = BiTreeNode(100)root.lchild = BiTreeNode(30)root.rchild = BiTreeNode(102)level_order(root)三⼆叉搜索树⼆叉搜索树是⼀棵⼆叉树且满⾜性质:设X是⼆叉树的⼀个节点。
Ch6树一、选择题:1.下列关于哈夫曼树的叙述,错误的是( C )。
A.哈夫曼树根结点的权值等于所有叶结点权值之和。
B.具有n个叶结点的哈夫曼树共有2n-1个结点。
C.哈夫曼树是一棵二叉树,因此它的结点的度可以为0,1,2。
D.哈夫曼树是带权路径长度最短的二叉树。
2.由3个结点可以构成多少棵不同形态的二叉树( C )。
A.3 B.4 C.5 D.6(3.如果一棵二叉树结点的前序序列是A,B,C,后序序列是C,B,A,则该二叉树结点的中序序列是( D )。
A.A,B,C B.A,C,B C.B,C,A D.不能确定4.如图所示的4棵二叉树中,( B )不是完全二叉树。
A.B.C.D.5.二叉树按某种顺序线索化后,任一结点均有指向其前趋和后继的线索,这种说法( B )A.正确B.错误若结点有左子树,则令其lchild指针指示其左孩子;若结点没有左子树,则令其lchild指针指示其前驱;若结点有右子树,则令其rchild指针指示其右孩子;若结点没有右子树,则令其rchild指针指示其后继。
)6.二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法( A)。
A.正确B.错误7.对一棵70个结点的完全二叉树,它有( A )个叶子结点。
A.35 B.40 C.30 D.448.设一棵二叉树中,度为1的结点数为9,则该二叉树的叶子结点的数目为( D )。
A.10 B.11 C.12 D.不确定n0=n2+19.假定根结点的层次为0,含有15个结点的二叉树最小高度为( A )。
A.3 B.4 C.5 D.6)假定根结点的层次为1,含有15个结点的二叉树最小高度为410.若一棵二叉树中,度为2的结点数为9,该二叉树的叶子结点的数目为( A )。
A.10 B.11 C.12 D.不确定n0=n2+111.设根结点的层次为0,则高度为k的二叉树的最大结点数为(C )。
A.2k-1 B.2k C.2k+1-1 D.2k+1若设根结点的层次为1,则这棵树的高度为k+1,高度为k+1的二叉树的最大结点数为2k+1-1 12.以知某二叉树的后序遍历序列为abdec,先序遍历序列为cedba,它的中序遍历序列为( D )。
习题六树和二叉树一、单项选择题1.以下说法错误的是 ( )A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构E.任何只含一个结点的集合是一棵树2.下列说法中正确的是 ( )A.任何一棵二叉树中至少有一个结点的度为2B.任何一棵二叉树中每个结点的度都为2C.任何一棵二叉树中的度肯定等于2D.任何一棵二叉树中的度可以小于23.讨论树、森林和二叉树的关系,目的是为了()A.借助二叉树上的运算方法去实现对树的一些运算B.将树、森林按二叉树的存储方式进行存储C.将树、森林转换成二叉树D.体现一种技巧,没有什么实际意义4.树最适合用来表示 ( )A.有序数据元素 B.无序数据元素C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C.15 D.不确定6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。
与森林F 对应的二叉树根结点的右子树上的结点个数是()。
A.M1 B.M1+M2 C.M3 D.M2+M37.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A. 250 B. 500 C.254 D.505 E.以上答案都不对8. 设给定权值总数有n 个,其哈夫曼树的结点总数为( )A.不确定 B.2n C.2n+1 D.2n-19.二叉树的第I层上最多含有结点数为()A.2I B. 2I-1-1 C. 2I-1 D.2I -110.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点A.2h B.2h-1 C.2h+1 D.h+111. 利用二叉链表存储树,则根结点的右指针是()。
A.指向最左孩子 B.指向最右孩子 C.空 D.非空12.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。