- 8
- 0
- 约1.49万字
- 约 85页
- 2020-08-23 发布于湖北
- 举报
第五章 树 5.1 树的概念 5.2 二叉树 5.3 二叉树的遍历 5.4 二叉树其它运算 5.7 树的存储结构和运算 5.1树的概念 5.1.1 树的定义 树的递归定义: (1)树由具有相同特性的数据元素(称为结点)组成,结点个数为0时,称为空树; (2)在一棵非空树中有且仅有一个根root结点,除根结点外,其余结点可分为m( m ≥0)个互不相交的子集,每个子集也是一棵树,称为子树SubTree。 二叉链表:值域,左指针域,右指针域。 先序遍历 void Preorder(BTreeNode* BT) { if(BT!=NULL) { cout BT-data ; Preorder(BT-left); Preorder(BT-right); } } 程序: (与书二版略有不同,请对照) 广义表表示的二叉树的格式 A( B( D ), C( F( , E ), G) ) @ void CreateBTree(BTreeNode* BT, char* a) { BTreeNode *s[10]; //二叉链表结点的栈 int top=-1; //栈指针 BT=NULL; //根结点 BTreeNode* p; //二叉树结点的指针 int k; //用作处理结点左子树或右子树的标记,左=1,右=2 istrstream ins(a); //将字符串a定义为输入字符串流对象ins char ch; insch; //从ins流对象中顺序读入一字符,空格为分隔符 3 判断一棵二叉树是否为空树 int BTreeEmpty(BTreeNode* BT) { return BT==NULL; } 7 清除二叉树,使之变为一棵空树 void ClearBTree(BTreeNode* BT) { if(BT!=NULL){ ClearBTree(BT-left); ClearBTree(BT-right); delete BT; BT=NULL; } } 调用以上操作的实例,且以上操作都存放在btree.h文件中 #includeiostream.h #includestdlib.h #includestrstrea.h typedef char ElemType; struct BTreeNode { ElemType data; BTreeNode * left; BTreeNode * right; }; #include”btree.h” 第6章 特殊二叉树 6.1 二叉搜索树-二叉排序树 6.2 堆(自学,不作要求) 6.3 哈夫曼树(全部掌握) 6.4 线索二叉树(掌握概念) 6.5 平衡二叉树 生成一棵具有n个结点的二叉搜索树的算法 void CreateBSTree(BSTree * BST, ElemType a[], int n) { BST=NULL; for (int i=0; in; i++) Insert(BST, a[i]); } 一般而言,时间复杂度为 O(n*log2 n) 书面回答,请以纸面形式上交课代表,要求整洁清楚,时间期限:5月23日 [格式提头:学号/序号/姓名/第五六章] 1 设二叉树bt的存储结构如下: 1 2 3 4 5 6 7 8 9 10 其中,bt为树根结点指针,lchild,rchild分别为结点的左、右孩子指针域,在这里使用结点编号为指针域值,0表示指针域值为空;data为结点的数据域。请完成下列各题: (1)画出二叉树bt的逻辑结构。 (2)写出按先序、中序和后序遍历二叉树bt所得到的结点序列。 2 试求含有n个叶子结点的完全二叉树的总结点数。 3 已知一棵二叉树的中序序列是cbedahgijf,后序序列为cedbhjigfa,画出该二叉树。 4 设给定权集w={2,3,4,7,8,9},试构造关于w的一棵哈夫曼树,并求其加权路径长度WPL. 6.2 堆 (略,不做要求) 6.3 哈夫曼树 6.3.1 基本术语 1、结点之间的路径和路径长度 从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上的分支的数目即称作这两个结点之间路径长度。 2、结点的权和带权路径长度 从根结点到结点的路径长度与结点的权的乘积。 3、树的带权路径长度 树中所有叶子结点的带
原创力文档

文档评论(0)