第五章学习心得

本章节学习了树,其中最重要的就是二叉树,以下是树的定义

typedef struct
{//树类型定义
  Node *nodes; //在初始化时使用new来申请空间
  int root; //根结点下标
}Tree;

另外就是对于树的遍历,有三种遍历方法,先序输出,中序输出和后序输出,可以通过递归来完成的

中序遍历的递归算法

void InOrderTraverse{BiTree T)

{//中序遍历二叉树T的递归算法

if{T) //若二叉树非空

{ InOrderTraverse {T-> lchild) ; / /中序遍历左子树

 cout<<T->data; II访问根结点

 InOrderTraverse {T-> rchild); I I中序遍历右子树}

}

树也有三种储存方法:双亲表示法、孩子表示法、孩子兄弟法。

孩子表示法的定义如下

#define MAXSIZE 100

typedef struct ChildNode{//孩子节点

    int data;//孩子的下标

    struct ChildNode *next;//指向下一个孩子

    }ChildNode;

typedef struct PrNode{//亲节点

    int parent;//亲节点下标

    char data;//就是ABCD那些数据域

    ChildNode *headchildren;//指向孩子链表的头指针

    }PrNode;

typedef struct Tree{//树的定义

   PrNode a[MAXSIZE];

   int root;//根节点下标

   int n;//节点个数

   }Tree;

 

当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。

在构建哈弗曼树时,要使树的带权路径长度最小,只需要遵循一个原则,那就是:权重越大的结点离树根越近。

 

posted @ 2020-05-31 23:12  冯培俊  阅读(221)  评论(0)    收藏  举报