1.邻接矩阵和邻接表的写法:
**介绍:**该图是一个无向图
,所以邻接矩阵
一定是对称
的,而邻接表
某节点的边数
为无向图某节点
的连接数
无向图的邻接矩阵:
无向图的邻接表(不唯一):
根据无向图所连接节点进行判断,1连3个节点,所以在邻接表中1连接的边数为3个
有向图的邻接矩阵
有向图的邻接表(唯一):
与无向图同理,看某个节点的出度边数即可
2.最小生成树的画法,以及依次得到的各边
1.克鲁斯卡尔算法画最小生成树
介绍: 该题是要求用克鲁斯卡尔算法得到最小生成树的边(依次)
方法: 1.首先将这棵树的每一条边进行排序——>2.然后按照权值从小到大绘制树(若该边构成回路,则跳过)——>3.绘制出最小生成树后,写从小到大排序的边即可
答案:
https://blog.csdn.net/qq_44880154/article/details/111449040
2.Prim算法绘制最小生成树:
根贪心类似,1.从第一个顶点搜索权值最小的第二节点,绘制路线后,2.从第二各节点再往后搜(需要判断之前的节点是否有较小的相邻路径,如果有,就走之前节点的,其次是需要判断是否构成环)
(记住:后面节点在后续搜索的时候,需要判断之前的节点是否有较小的相邻节点)
总结: 而克鲁斯卡尔算法的话,他是先把边全部排序好,按权值从小到大进行绘制,如果构成环就跳过
3.堆的具体操作
分为建堆
和调整堆
两个操作,每次调整堆需要logn的时间,n个数据建堆则需要0(n),n次调整则需要0(nlogn)的时间复杂度
(注意:不需要画箭头,注意区分建堆和调整堆两个操作)
4.算法题(阅读)
1. 不断遍历p指针,使p到末尾节点
2. 使头节点链接到末尾节点上
3. a2…an a1
5.二叉搜索树
1. true 2. BST->left 3. BST->right
6.统计单链表中符合x值得节点数
int CountX(LNode* HL,ElemType x){int i=0; //i为计数器LNode*p=HL;//遍历统计while(p!=NULL){//如果满足该值i+1if(p->data==x) i++;p=p->next;}return i;
}
7.判断是否为平衡二叉树
bool isBalanced(TreeNode* root){//1.特殊情况:如果当前节点为空,return trueif(root==NULL) return true; //2.根节点不为空,求左右子树高度int left_height=height(root->left);int right_height=height(root->right);//3.判断当前大树是否满足平衡二叉树&&大树的左右子树if(abs(left_height-right_height)<=1&&isBalanced(root->left)&&isBalanced(root->right)){return true;} return false;
}int height(TreeNode* root){//1.baseif(root==NULL) return 0;//2.左右子树高度int left_height=height(root->left);int right_height=height(root->right);//3.后续:当前节点的最大高度return (left_height>right_height?left_height:right_height)+1;
}