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+1
if(p->data==x) i++;
p=p->next;
}
return i;
}
7.判断是否为平衡二叉树
bool isBalanced(TreeNode* root){
//1.特殊情况:如果当前节点为空,return true
if(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.base
if(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;
}