第五章——树

这两周我们主要学到了有关树和二叉树的用法,掌握了二叉树的遍历的基本操作。

1.树的定义及特点

树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:(1) 每个节点有零个或多个子节点;

(2) 没有父节点的节点称为根节点;

(3) 每一个非根节点有且只有一个父节点;

(4) 除了根节点外,每个子节点可以分为多个不相交的子树。

2.关于树的官方语言

结点的度:结点拥有的子树的数目。
叶子:度为零的结点。
分支结点:度不为零的结点。
树的度:树中结点的最大的度。

层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1。
树的高度:树中结点的最大层次。
无序树:如果树中结点的各子树之间的次序是不重要的,可以交换位置。
有序树:如果树中结点的各子树之间的次序是重要的, 不可以交换位置。
森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。

3.二叉树的遍历

几乎所有操作建立在遍历的基础上,利用递归完成二叉树前(根)序,中(根)序,后(根)序遍历。

(1)先序遍历

void PreOrderTraverse(BiTree T)
{
  If( T )//若二叉树非空
{
  cout<<T->data;//访问根结点
  PreOrderTraverse( T->lchild );//先序遍历左子树
  PreOrderTraverse( T->rchild );//先序遍历左子树
}
//先序

先序

(2)中序遍历

void InOrderTraverse(BiTree T)
{
  If( T )//若二叉树非空
{
  InOrderTraverse( T->lchild );//中序遍历左子树
  cout<<T->data;//访问根结点
  InOrderTraverse( T->rchild );//中序遍历左子树
}
//中序

中序

(3)后序遍历

void PostOrderTraverse(BiTree T)
{
  If(T)//若二叉树非空
{
  PostOrderTraverse( T->lchild );//后序遍历左子树
  PostOrderTraverse( T->rchild );//后序遍历左子树
  cout<<T->data;//访问根结点
}
//后序

后序

看代码的能力提升了,但打代码的能力依旧在一个较低的水平。随着代码打的越来越多,会更熟练的。

原文地址:https://www.cnblogs.com/chenjianyuan/p/10810586.html

时间: 2024-10-31 07:05:06

第五章——树的相关文章

第五章 树和二叉树

上章回顾 单链表的基本操作,包括插入.删除以及查找 双向链表和循环链表的区别 [email protected]:Kevin-Dfg/Data-Structures-and-Algorithm-Analysis-in-C.git 第五章 第五章 树和二叉树 树和二叉树 [email protected]:Kevin-Dfg/Data-Structures-and-Algorithm-Analysis-in-C.git 预习检查 什么是二叉树 树的遍历有哪几种方式 树有哪些应用 [email pr

第五章 树与二叉树总结

树结构是一类重要的非线性数据结构 1.树的定义:树(Tree)是n(n>=0)个结点的有限集,它或为空树(n=0):或为非空树: 对于非空树: (1)有且仅有一个称之为根的结点: (2)除根结点以外的其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每个集合本身又是一颗树,并且称为根的子树(SubTree): 2.树的基本术语 (1)结点:树中的一个独立单元. (2)结点的度:结点拥有的子树数称为结点的度. (3)树的度:树的度是树内各结点的最大值. (4)叶子:度为0

数据结构——第五章 树与二叉树

树是一对多的结构 结点:树的小圆圈 度:结点有多少个分叉 叶子结点:结点的度为0 双亲:parent 孩子:child 二叉树:树的度不超过2 满二叉树:每一层都是满的 完全二叉树:除了最后一层都是满的,最后一层左边都是齐全连续的. 性质1:对一颗二叉树,第i层最多有2的i-1次方个 性质2:对一颗二叉树,最多有2的i次方-1个 性质3:n0=n2+1 n0+n1+n2=n(n0--结点度为0的个数,n2--结点度为2的个数) 性质4:具有n个结点的完全二叉树深度为 math.floor(log

第五章题解

第五章 树和二叉树 本章我们重点学习了树和二叉树的定义.二叉树的性质.存储结构.二叉树的先中后序遍历.简略的学习了树和森林的存储结构.遍历,大致讲解了哈夫曼树的基本感念.在学习过程中,建树和二叉树的遍历对我来讲比较难.建树可以用顺序存储也可以用二叉链表存储,二叉树的遍历可以用递归实现也可以用非递归实现.下面主要讲讲我在PTA做题过程的一些感想和思路. List Leaves 这道题的思路很简单: 构造二叉树的结点结构体.建立二叉树.利用队列输出叶子结点 第一步 构造二叉树的结点结构体 由于这道题

JS复习第五章

第五章 引用类型 一.Object类型 创建object实例的方式有两种. 第一种是使用new操作符后跟object构造函数,如下所示: ver person = new Object( ) ; person.name = “Nicholas” ; person.age = 29 ; 另一种方式是使用对象字面量表示法: var person = { name : “Nicholas”, age : 29 } ; 对象字面量是向函数传递大量可选参数的首选形式. function displayIn

现代编译原理--第五章(活动记录)

(转载请表明出处  http://www.cnblogs.com/BlackWalnut/p/4559245.html ) 第五章是到目前位置最让我头疼的一章,不是因为难,是因为对最终的目的不太明确.整章前半部分用十分精简的语言介绍了一个新的概念,活动记录,也就是在函数调用时,一个调用栈究竟发生了什么事.但是,在最终编码实现过程中,总不能理解作者为什么给了这些变量?或者说,完全不知道作者究竟想让我完成一个怎样的功能.纠结了好几天,后来索性往后继续看,看看能不能找到其他的线索.直到看完后一章,硬着

阅读《软件工程—理论方法与实践》第五章心得体会

阅读第五章所了解到的基本知识,形式化方法是指将离散数学的方法用于解决软件工程领域的问题,主要包括建立精确的数学模型以及对模型的分析活动.主要目的是保证软件的正确性.已建立的形式化方法可分为操作类和描述类.操作类方法基于状态和转移;描述类基于数学公理和概念.形式证明与验证技术主要包括模型检测(适用于有穷状态系统,完全自动化并且验证速度快)和定理证明(采用逻辑公式来表示系统规约及其性质,分为自动和交互式两种).一阶线性时态逻辑是一阶谓词逻辑的扩展.对汉诺塔操作规划问题有了更深一步的理解.计算树逻辑是

算法导论基础(第一~五章)

插入排序 最好情况输入数组开始时候就是满足要求的排好序的,时间代价为θ(n): 最坏情况输入数组是按逆序排序的,时间代价为θ(n^2). 归并排序 归并排序采用了算法设计中的分治法,分治法的思想是将原问题分解成n个规模较小而结构与原问题相似的小问题,递归的解决这些子问题,然后再去合并其结果,得到原问题的解. 分治模式在每一层递归上有三个步骤: 分解(divide):将原问题分解成一系列子问题. 解决(conquer):递归地解答各子问题,若子问题足够小,则直接求解. 合并(combine):将子

JavaScript DOM编程艺术-学习笔记(第五章、第六章)

第五章: 1.题外话:首先大声疾呼,"js无罪",有罪的是滥用js的那些人.js的father 布兰登-艾克,当初为了应付工作,10天就赶出了这个js,事后还说人家js是c语言和self语言"约"的产物,(百度百科说的,这些).....一个可怜的孩子-js.然后命运弄"人",js此时已世人皆知.可能是因为js的毁誉参半,它老爸才不想承认它吧.如果js会说话,它可能会给它布兰登-艾克说,"你当初怎么不把*******在墙上".这