数据结构
Zzzzack
这个作者很懒,什么都没留下…
展开
-
查找二叉树祖先
1.第一种方法:求出所有子列的和,比较for(i=0;i<n;i++)//i是子列左端 for (j=i;j<n;j++){//j是子列右端 //i和j将数列所有的子列都依次表示出来,用k来扫描每个子列 thissum=0;//每次开始扫描之前,先将thissum从零开始 for(k=i;k<=j;k++) thissum+=a[k]; if(原创 2017-10-18 21:59:46 · 1682 阅读 · 0 评论 -
层序遍历及其应用
层序遍历,利用队列存储下一层的节点,也就是说,队列中最多共存两层的节点。 具体说,根节点入队,出队,将其左右孩子入队。再出队,为根节点的左孩子(如果存在),将其左右孩子入队,再出队,为根节点的右孩子(如果存在)….void levelorder(btree t){ initqueue(Q); btnode *p=t; if(p) enqueue(Q,p);// 根节点入队 while(!e原创 2017-10-18 23:21:25 · 769 阅读 · 1 评论 -
二叉树的递归算法应用
1.求叶节点个数(包含于4.) 2.由已知中序、先序序列建树 3.求高度 4.求度为1/2/0的节点个数 5.交换二叉树左右孩子(镜面反射二叉树) 6.查找先序序列中第k个节点 7.根据先序、后序确定满二叉树 8.判断两个二叉树是否相似 9.二叉树线索化 10.在中序线索二叉树里查找指定节点在后序的前驱节点 11.叶节点的带权路径长度之和2.由已知中序、先序序列建树 算法思想:原创 2017-10-22 15:44:59 · 697 阅读 · 0 评论 -
求树的深度
1.以孩子兄弟链表作为存储结构//数据结构typedef struct csnode{ elemtype data; struct csnode *firstchild,*nextsibling;}csnode,*cstree;//算法int depth(cstree t){ csnode *p; int m,d; if(t==null) return 0; p=t->fir原创 2017-11-10 16:28:30 · 591 阅读 · 1 评论 -
删除二叉树所有叶节点
需要记录t的父节点void delete(bitree &t,binode *p){//p初始为空 if(t==null) return ; if(t->lchild==null&&t->rchlid==null) {//如果为叶节点 if(p=null) //该树只有根节点 free(t); else { free(t); p->lchild=null; p->原创 2017-11-10 16:48:41 · 8068 阅读 · 3 评论 -
求二叉树指定节点所在层次
int level(bitree t,binode *p){ int d1,d2; if(t==null) return 0; if(t==p) return 1; d1=level(t->lchild,p); d2=level(t->rchild,p); return 1+(d1>d2?d1:d2);}原创 2017-11-10 16:56:44 · 13238 阅读 · 10 评论 -
判断满二叉树
判断满二叉树,递归 1.空树,满 2.左满右满,且左右深度相等,满 3.否则,非满bool isfull( bitree t){ if(!t) return true; int ldepth,rdepth; ldepth=depth(t->lchild); rdepth=depth(t->rchild); if(isfull(t->lchild)&&isfull(t->rchild)原创 2017-11-02 22:02:30 · 1048 阅读 · 2 评论 -
二叉树的非递归先序、中序、后序遍历
算法思想: 先序:NLR的访问顺序,由于R节点,即右孩子的访问需要通过根节点的指针来实现,所以,需要设一个栈来存储根节点。具体看代码:void preorder(btree t){ initstack(s);//初始化栈 btree p=t; while(p||!empty(s)){ if(p){//如果该节点非空 visit(p);//访问 push(s,p);//入栈,栈中原创 2017-10-22 14:26:02 · 200 阅读 · 0 评论 -
二路归并排序及其改进方法
二路归并排序的算法 归并:void merge(elemtype a[],int low,int mid, int high){//mid将a分成左右low-mid,mid+1-high两部分 int i,j,k; elemtype b[high-low+1];//辅助数组b的长度为high-low+1 for(i=low;i=high;i+) b[i]=a[i];//复制a到b i=l原创 2017-11-05 23:34:55 · 545 阅读 · 0 评论