
求数据结构做二叉树实验的心得体会、、、
二叉树的基本操作 C语言实现\\\/*程序实现内容1.采用二叉树链表作为存储结构,建立二叉树;2.对二叉树分别按先、中、后序以及按层次遍历,输出相应的访问序列;3.计算二叉树的深度,统计所有叶子结点总数及树中包含的结点总数。
*\\\/#includestdio.h#includestring.h#includemalloc.h#define Max 20 \\\/\\\/结点的最大个数typedef struct node{char data;struct node *lchild,*rchild;}BinTNode; \\\/\\\/自定义二叉树的结点类型typedef BinTNode *BinTree; \\\/\\\/定义二叉树的指针int NodeNum,leaf; \\\/\\\/NodeNum为结点数,leaf为叶子数\\\/\\\/基于先序遍历算法创建二叉树\\\/\\\/要求输入先序序列,其中加入虚结点“#”以示空指针的位置BinTree CreatBinTree(void){BinTree T;char ch;if((ch=getchar())=='#')return(NULL); \\\/\\\/读入#,返回空指针else{T=(BinTNode *)malloc(sizeof(BinTNode));\\\/\\\/生成结点T->data=ch;T->lchild=CreatBinTree(); \\\/\\\/构造左子树T->rchild=CreatBinTree(); \\\/\\\/构造右子树return(T);}}\\\/\\\/DLR 先序遍历void Preorder(BinTree T){if(T) {printf(%c,T->data); \\\/\\\/访问结点Preorder(T->lchild); \\\/\\\/先序遍历左子树Preorder(T->rchild); \\\/\\\/先序遍历右子树}}\\\/\\\/LDR 中序遍历void Inorder(BinTree T){if(T) {Inorder(T->lchild); \\\/\\\/中序遍历左子树printf(%c,T->data); \\\/\\\/访问结点Inorder(T->rchild); \\\/\\\/中序遍历右子树}}\\\/\\\/LRD 后序遍历void Postorder(BinTree T){if(T) {Postorder(T->lchild); \\\/\\\/后序遍历左子树Postorder(T->rchild); \\\/\\\/后序遍历右子树printf(%c,T->data); \\\/\\\/访问结点}}\\\/\\\/采用后序遍历求二叉树的深度、结点数及叶子数的递归算法int TreeDepth(BinTree T){int hl,hr,max;if(T){hl=TreeDepth(T->lchild); \\\/\\\/求左深度hr=TreeDepth(T->rchild); \\\/\\\/求右深度max=hl>hr? hl:hr; \\\/\\\/取左右深度的最大值NodeNum=NodeNum+1; \\\/\\\/求结点数if(hl==0&&hr==0) leaf=leaf+1; \\\/\\\/若左右深度为0,即为叶子。
return(max+1);}else return(0);}\\\/\\\/利用“先进先出”(FIFO)队列,按层次遍历二叉树void Levelorder(BinTree T){int front=0,rear=1;BinTNode *cq[Max],*p; \\\/\\\/定义结点的指针数组cqcq[1]=T; \\\/\\\/根入队while(front!=rear){front=(front+1)%NodeNum;p=cq[front]; \\\/\\\/出队printf(%c,p->data); \\\/\\\/出队,输出结点的值if(p->lchild!=NULL){rear=(rear+1)%NodeNum;cq[rear]=p->lchild; \\\/\\\/左子树入队}if(p->rchild!=NULL){rear=(rear+1)%NodeNum;cq[rear]=p->rchild; \\\/\\\/右子树入队}}}\\\/\\\/主函数main(){BinTree root;int i,depth;printf(\\\ );printf(Creat Bin_Tree; Input preorder:); \\\/\\\/输入完全二叉树的先序序列,\\\/\\\/ 用#代表虚结点,如ABD###CE##F##root=CreatBinTree(); \\\/\\\/创建二叉树,返回根结点do { \\\/\\\/从菜单中选择遍历方式,输入序号。
printf(\\\********** select ************\\\ );printf(\\\1: Preorder Traversal\\\ );printf(\\\2: Iorder Traversal\\\ );printf(\\\3: Postorder traversal\\\ );printf(\\\4: PostTreeDepth,Node number,Leaf number\\\ );printf(\\\5: Level Depth\\\ ); \\\/\\\/按层次遍历之前,先选择4,求出该树的结点数。
printf(\\\0: Exit\\\ );printf(\\\*******************************\\\ );scanf(%d,&i); \\\/\\\/输入菜单序号(0-5)switch (i){case 1: printf(Print Bin_tree Preorder: );Preorder(root); \\\/\\\/先序遍历break;case 2: printf(Print Bin_Tree Inorder: );Inorder(root); \\\/\\\/中序遍历break;case 3: printf(Print Bin_Tree Postorder: );Postorder(root); \\\/\\\/后序遍历break;case 4: depth=TreeDepth(root); \\\/\\\/求树的深度及叶子数printf(BinTree Depth=%d BinTree Node number=%d,depth,NodeNum);printf( BinTree Leaf number=%d,leaf);break;case 5: printf(LevePrint Bin_Tree: );Levelorder(root); \\\/\\\/按层次遍历break;default: exit (1);}printf(\\\ );} while(i!=0);
二叉树中,什么是前序,中序。
后序
d
计算机大神进急求1. 总结和比较线性表、堆栈、队列、二叉树、树、图的各种存储结构,并说明
5.\\\/\\\/ aaaaaaaaaaaa.cpp : 定义控制台应用程序的入口点。
\\\/\\\/\\\/\\\/ Tree.cpp : 定义控制台应用程序的入口点。
\\\/\\\/#include stdafx.h#include 数据结构学习体会及教学建议时间过的很快,一转眼一学期的数据结构课程就已经快要告一段落了,在接触这么课以前,我觉得编程无非就是会写代码就好了。 然而事实上数据结构对于程序来说,有着非常重要的地位。 随着计算机应用领域的不断扩大,非数值计算的问题占据了当今计算机应用的绝大部分,简单的数据类型已经远远不能满足需要,个数据元素之间的复杂关系已经不是普通数学方程式能够表达的了,所以数据结构就扮演了十分重要的角色。 在学期初,我觉得数据结构还是比较简单的,但可能由于之前c语言学习对指针掌握的不够熟练,导致在数据结构中接触到与指针有关的问题,例如线性表,堆栈,队列,二叉树等问题的时候,都会显得有些吃力。 但是在不断学习数据结构的过程中我也不断加强了对指针的学习,现在我已经能够基本掌握指针的相关知识并且能够熟练运用了。 这一学期的学习下来我发现想要学好数据结构有以下几点经验{虽然可能我的数据结构学的并不是很好}1.初步了解算法思想、原理想要弄清楚一个算法的实现,首先要知道这个算法的大致原理,这是最简单的一步,也是最基础的一步,只有明白算法想要干什么,才能弄清楚相应的代码段是为什么2.钻研课本代码段对于书上的算法代码,我们一定要仔细钻研每一步的具体含义和目的,在此基础上深入的了解算法的实现过程,而不是一味的四级硬背,不仅无聊,而且效率低下。 3.查找各种算法资料例如排序算法,其实历史上有很多不同的排序算法,书上 结点的度:一个结点的子树数目称为该结点的度。 显然,所有树叶的度为0。 树的度:所有结点中最大的度称为该树的度。 树的深度(高度)树是分层次的。 结点所在的层次是从根算起的。 根结点在第一层,根的后件在第二层,其余各层依次类推。 即若某个结点在第k层,则该结点的后件均处在第k+1层。 图(b)中的树共有五层。 在树中,父结点在同一层的所有结点构成兄弟关系。 树中最大的层次称为树的深度,亦称高度。 性质1:在二叉树的第i(≥1)层上,最多有2i-1个结点性质2:在深度为k(k≥1)的二叉树中最多有2k-1个结点。 质3:在任何二叉树中,叶子结点数总比度为2的结点多1二叉树中度为2的节点数为度为0(即叶子节点数)减1,故总结点数n=n0+n1+n2学习数据结构的心得体会
(数据结构)求二叉树每个结点的度



