- 博客(48)
- 收藏
- 关注
原创 设计判断二叉树是否为二叉排序树的算法
bool isValidBST(TreeNode* root) { if (!root) return true; TreeNode *left = root->left; TreeNode *right = root->right; while (left) { if (root->val <= left->val) return false; left = left->right;
2021-04-07 21:04:34
1061
原创 假设一个图G采用邻接表作为存储结构,设计一个算法,判断该图中是否存在回路
解:采用深度优先遍历方法,从顶点v出发,对每个访问的顶点w做标记(visited[w]=1)。若顶点w(先访问)和i(后访问)均已访问过,表示从顶点w到顶点i存在一条路径。当从顶点i出发遍历,发现顶点i到顶点w有一条边时,表示存在一个回路(该回路上包含顶点w和i)。算法Cycle(G,v,has)从顶点v出发判断图G中是否存在回路,has是布尔值,初始调用时置为false,执行后若为true表示有回路,否则表示图G中没有回路。对应的算法如下:void Cycle(AGraph *G,int v,bool
2021-04-02 16:37:16
4367
1
原创 数据结构大题
1. 假设二叉树采用二叉链存储结构进行存储,假设每个节点值为单个字符且所有节点值不同,设计一个算法,输出二叉树b中第k的所有节点值,并分析你所设计算法的时间复杂度。void Dispk(BTNode *b,int k){ Dispk1(b,k,1);}void Dispk1(BTNode *b,int k,int h){ if (b!=NULL) { if (h==k) printf(“%c “,b->data); Dispk1(b->lchild,k,h+1); D
2021-03-31 17:23:15
1374
原创 十进制和八进制的相互转换
十进制转八进制#include<stdio.h>void main(){ int n; int i = 0; printf ("n = "); scanf ("%d", &n); int a[10] = {0}; while (n){ a[i++] = n % 8; n = n / 8; } int j; for (j = i-1; j >= 0; j--) {
2021-03-31 16:05:24
860
原创 数据结构应用题
有两个磁盘文件“A”和“B”,各存放一行字母,今要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件"C"中去。#include <stdio.h>#include <stdlib.h>int main (){ FILE *fp; int i,j,n,i1; char c[100],t,ch; if ((fp=fopen("a1","r"))==NULL) { printf("\ncan not open file\n"); exit(0)
2021-03-30 20:16:21
673
原创 数据结构问答题
设n为总的节点个数,n0为叶子节点(即度为0的节点)的个数,则有:n=n0+n1+n2+…+nm又有:n-1=度的总数,即,n-1=n1×1+n2×2+…+nm×m两式相减得:1=n0-n2-2n3-…-(m-1)nm则有:n0=1+n2+2n3+…+(m-1)nm= 。
2021-03-30 16:53:38
1134
原创 假设一个连通图采用邻接表G存储结构表示。设计一个算法,求起点u到终点v的经过顶点k的所有路径
int visited[MAXV]={0}; //全局变量void PathAll(ALGraph *G,int u,int v,int k,int path[],int d)//d是到当前为止已走过的路径长度,调用时初值为-1{ int m,i; ArcNode *p; visited[u]=1; d++; //路径长度增1 path[d]=u; //将当前顶点添加到路径中 if (u==v && In(path,d,k)==l) //输出一条路径
2021-03-29 21:30:05
2491
2
原创 求指定值为x的结点的双亲结点p
假设二叉树b采用二叉链存储结构,设计一个算法void findparent(BTNode *b,ElemType x,BTNode *&p)求指定值为x的结点的双亲结点p,提示,根结点的双亲为NULL,若在b中未找到值为x的结点,p亦为NULL。void findparent(BTNode *b,ElemType x,BTNode *&p){BTNode *k; k=d;if(k->data ==x) p=null;if(k->lchild->data == x
2021-03-29 21:17:45
2986
4
原创 设计一个尽可能高效的算法求A和B的交集,要求不破坏A、B的结点,将交集存放在单链表C中
设A和B是两个结点个数分别为m和n的单链表(带头结点),其中元素递增有序LinkList *insertion(LinkList *A,LinkList *B,LinkList *C){C=(LinkList *)malloc(sizeof(LinkList));LinkList *p,*q,*k; p=A->next; q=B->next; k=C->next;if(p==null) return null;if(q==null) return null;while
2021-03-29 20:54:21
738
原创 众数问题:在一个由整数组成的线性表中,出现数数最多的数称为众数
int find_zhong(List *L,int n){List *p; int i,j,time,k,num;p=L;for(i=0;i<n;i++){ k=0; for(j=0;j<n;j++){ if(p->data[i] == p->data[j]) k++; } if(time < k){ num=p->data[i]; time=k; }}return num;}
2021-03-29 20:43:40
250
原创 将二叉树bt中每一个结点的左右子树互换
其中ADDQ(Q,bt),DELQ(Q),EMPTY(Q)分别为进队typedef struct node{int data ; struct node *lchild, *rchild; }btnode; void EXCHANGE(btnode *bt){ btnode *p, *q; if (bt){ ADDQ(Q,bt); while(!EMPTY(Q)){ p=DELQ(Q); q= p->lchild; .
2021-03-29 20:08:14
968
2
原创 求二叉树双支个数的算法
struct TreeNode{ int data; struct TreeNode *left, *right; };int fnGetLeaf( TreeNode *T ){ if(T==NULL) return 0; if( T->left!=NULL && T->right!=NULL) return (1+fnGetLeaf(T->left)+ fnGetLeaf(T->left)); else retu
2021-03-29 20:05:28
233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人