第五章学习心得
本章节学习了树,其中最重要的就是二叉树,以下是树的定义
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 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。
在构建哈弗曼树时,要使树的带权路径长度最小,只需要遵循一个原则,那就是:权重越大的结点离树根越近。

浙公网安备 33010602011771号