第五章——树

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

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;//访问根结点
}
//后序
后序

 

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

posted @ 2019-05-05 00:17  有、无敌  阅读(138)  评论(1编辑  收藏  举报