1.一个有序的二维数组A[M][N],满足A[i][j]<=A[i][j+1],A[i][j]<=A[i+1][j],查找二维数组中值为x的元素的下表i和j,要求时间复杂度不超过o(M+N)
思路:由于该二维数组的每一行元素递增,每一列元素也递增,故先用待查找元素x与第一列元素进行比较,先确定所在行数,然后在行内进行查找。
void fun(int a[M][N],int x)
{
int i=0,j=0;
for(i=0;i<M;i++)
{
if(x>=a[i][0]&&x<a[i+1][0])
break;
}
for(j=0;j<N;j++)
{
if(a[i][j]==x)
break;
}
printf("%d,%d",i,j);
}
2.输出根节点到指定结点q的路径(注意题干中要求的左孩子是rchild还是left)
3.有向无环图,n个结点,e条边,求顶点到每个节点的最短路径按非增序排序,要求时间复杂度不大于o(n+e)
4.求一颗树的最后一个结点(题目有问题)
5.判断单链表是否是中心对称(回文结构)
6.非递归不用栈后序遍历二叉树
7.用邻接表存储的有向图,判断u和v之间是否存在路径