`
- 浏览:
23323 次
- 性别:
-
树与二叉树
一、树
树是n(n>=0)个结点的有限集合。如果n=0则称为空树;如果n>0,那么有且仅有一个根结点。树是非线性的结构。
与树相关的基本概念:
1)结点:一个数据元素及指向其子树的分支;
2)结点的度:结点拥有的子树个数;
3)树的度:树中结点的度的最大值;
4)叶结点:度为0的树;
5)子女:结点子树的根;
6)父亲:与子女结点直接联系的子女的上层;
7)兄弟:同一结点的子女;
8)堂兄弟:同层,但为不同结点的子女;
9)结点层次:从根开始,根为第一层,根的子女为第二层,以此类推;
10)树的深度:书中结点的最大层数
11)森林:m(m>=0)棵互不相交的树。
二、二叉树
一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两个分别称为左子树和右子树的互不相交的二叉树组成。
特点:每个结点之多只有两棵子树。
性质:
1、二叉树的第i层上至多有2的n-1次方个结点(n>=1)
2、深度为k的二叉树至多有2的k次方-1个检点(k>=1)
3、二叉树中,度为0的结点比度为2的结点个数多1
满二叉树——一棵深度为k且有2的k次方-1个结点的二叉树。
完全二叉树——若二叉树的高度为h,除第h层外,其他各层的结点数都达到最大个数,第i层从右往左连续缺若干结点。
遍历二叉树:
1、前序遍历
先访问跟结点,然后遍历左子树,再遍历右子树。在遍历左子树和右子树的时候,同样先遍历它的根几点再依次遍历左右子树。
void PreOrder(BTreeNode root){
if(root!=null){
Visit(root.data);
PreOrder(root.lChild);
PreOrder(root.rChild);
}
}
2、中序遍历
先遍历左子树,然后访问根结点,再遍历右子树。在遍历左右子树的时候,同样先遍历它们的左子树再访问根结点再遍历右子树。
void InOrder(BTreeNode root){
if(root!=null){
InOrder(root.lChild);
Visit(root.data);
InOrder(root.rChild);
}
}
3、后序遍历
先遍历左子树,然后遍历右子树,再访问根结点。在遍历左右子树的时候,同样先遍历它们的左子树再访问根结点,然后遍历右子树。
void PostOrder(BTreeNode root){
if(root!=null){
PostOrder(root.lChild);
PostOrder(root.rChild);
Visit(root.data);
}
}
由此可知,到底是前序还是中序、后序遍历,是指根结点的遍历次序。
树的遍历:
1、按层次遍历:
若树不空,则自上而下、自左至右访问树中每个结点。
2、深度优先遍历
(1)先根次序遍历:
当树非空时,访问跟结点,再依次先根遍历根的各子树。
(2)后根次序遍历:
当树非空时,依次后根遍历分的各子树,在访问根结点。
3、按对应二叉树遍历:
先将普通书转换为对应的二叉树,再按二叉树的前序、中序、后序遍历方式访问各结点。
树:先根次序遍历 ====对应====> 二叉树:前序遍历
树:后根次序遍历 ====对应====> 二叉树:中序遍历
如有不足欢迎指正!
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
树与二叉树之间的转换是一个重要的概念,尤其是在数据结构和算法的学习中。下面我们将详细探讨这个主题。 一、树到二叉树的转换 1. 顺序遍历法:树转换为二叉树的主要方法是通过前序遍历(Preorder Traversal)、...
在计算机科学中,树与二叉树是两种重要的数据结构,它们在算法设计、数据库管理、编译原理等领域有着广泛的应用。本节我们将深入探讨树与二叉树的相关习题和知识点。 首先,我们来看一个关于满二叉树的问题。一棵...
树与二叉树之间的转化是一个重要的概念,尤其是在数据结构和算法的学习中。下面我们将详细探讨这个主题,同时也会涉及树的遍历方法。 首先,让我们了解如何将树转化为二叉树。一种常见的转化方法是赫夫曼编码...
树与二叉树算法总结 树与二叉树是计算机科学中非常重要的一部分,掌握树与二叉树的算法对于数据结构和算法设计非常重要。本文将对树与二叉树的基本概念、性质、运算和应用进行总结。 一、树的基本概念 树是一种非...
本次课程设计的主题是“二叉树的遍历及树与二叉树的转换”,这涉及到两个核心概念:二叉树的遍历方法和树与二叉树之间的转化。 首先,我们来深入理解二叉树的遍历。二叉树是由节点构成的数据结构,每个节点最多有两...
本文主要梳理了树与二叉树的相关知识点,并包含了相关作业习题的详解。 首先,树被定义为一个有限集合,其中包含一个特殊的根节点以及可能的子树集合。每个子树本身也是一个树,这种定义具有递归性。在树的结构中,...
因此,理解树与二叉树之间的转换是非常有价值的,它可以帮助我们根据问题选择最合适的表示方法。 总的来说,本课程设计的目标是加深对树和二叉树的理解,掌握它们之间的转换方法,并能用C++编程语言实现这个转换...
"树与二叉树算法汇总" 本资源摘要信息主要讨论树与二叉树算法,涵盖树与二叉树的表示、遍历和操作等方面的知识点。 一、树与二叉树的表示 树是一种基本的数据结构,用于存储具有层次关系的数据。二叉树是树的一种...
很好的一个课件,详细,基础的讲述了数据结构中最难理解的部分,帮助理解树与二叉树。。
根据给定的信息,本文将对数据结构中的树与二叉树相关的算法进行详细的解析与总结。主要内容包括:如何使用二叉树表示算术表达式、二叉树的顺序存储结构及其中叶子节点的计算方法、以及如何递归地构建二叉树并判断其...
"树与二叉树的转换及二叉树的遍历" 本设计的主要目的是实现树与二叉树的转换,并实现二叉树的遍历。通过本设计,学生可以巩固所学的理论知识,培养综合运用所学知识解决实际问题的能力。 一、树与二叉树的转换 树...
"树与二叉树详细整理" 树是一种非线性数据结构,主要用于描述带有层次关系的数据集。树的形式化定义是:树是由一个或多个结点组成的有限集合,其中有一个特定的称为根的结点;其余结点可分为m(m≥0)个互不相交的...
"数据结构java树与二叉树PPT课件.pptx" 本资源是关于数据结构中的树和二叉树的PPT课件,共51页。该资源对树和二叉树的定义、基本术语、类型、遍历方法等进行了详细的介绍。 树的定义: 树是由n(n≥0)个有限数据...
在计算机科学领域,树与二叉树是两种重要的数据结构,它们在算法设计、数据库管理、编译原理等多个方面有着广泛的应用。这个压缩包文件包含了关于树与二叉树操作的源代码,让我们来深入探讨这些概念及其相关知识点。...