2017数据结构

作者: 听力巴士 | 来源:发表于2019-07-02 13:39 被阅读0次

    选择:

    非常简单,最基础的证明。

    最难的一道:n层的整二叉树两个节点的最远距离是多少?

    分析:
        最大距离可能一个在左子树,一个在右子树中,通过根节点;也可能出现在左/右子树中,不经过根节点。通过根节点的最大距离为左右子树深度的和加1;所以可以同时计算树的深度和最大距离。

    void FindMaxDis(BSTreeNode *pNode, int &deepth, int &maxdis)
    {
        if (pNode==NULL)
        {
            deepth=0;maxdis=0;
            return;
        }
        int l_deepth=0,r_deepth=0;
        int l_maxdis=0,r_maxdis=0;
     
        if (pNode->m_pleft)
            FindMaxDis(pNode->m_pleft,l_deepth,l_maxdis);
        if (pNode->m_pright)
            FindMaxDis(pNode->m_pright,r_deepth,r_maxdis);
     
        deepth = (l_deepth > r_deepth ? l_deepth : r_deepth) + 1;
     
        maxdis = l_maxdis > r_maxdis ? l_maxdis : r_maxdis ;
     
        maxdis = (l_deepth+r_deepth) > maxdis ? (l_deepth+r_deepth) : maxdis;
     
    }
    int FindMaxDis(BSTreeNode *pNode)
    {
        int deepth, maxdis;
        FindMaxDis(pNode,deepth,maxdis);
     
        return maxdis;
    }
    

    填空:

    考了一组二叉树的性质,折半二叉树的构造。
    分析:
        折半查找:只适用于有序表,且限于顺序存储结构(线性链表无法进行折半查找)
    (1)思想:又称二分查找,对于已经按照一定顺序排列好的列表,每次都用关键字和中间的元素对比,然后判断是在前部分还是后部分还是就是中间的元素,然后继续用关键字和中间的元素对比。
    (2)时间复杂度:T(n) =O(logn)。具有n 个结点的完全二叉树的深度为,在这里尽管折半查找判定二叉树并不是完全二叉树,但同样相同的推导可以得出,最坏情况是查找到关键字或查找失败的次数也如此。其时间复杂度远好于顺序查找的时间复杂度O(n)了。

    (3)程序:
    Int BinSrch(RecordList l, KeyType k)  
        {  
                 low = 1;  
                 high = l.length;  
                 while(low <= high)  
                 {  
                      mid = (low + high) / 2;  
                      if(k == l.r[mid].key)  
                           return mid;  
                      else if(k < l.r[mid].key)  
                           high = mid -1;  
                      else  
                           low = mid + 1;  
                 }  
                 return 0;  
        }  
    

    (4)小结:由于折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,折半查找比较适合。但对于需要频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,则不建议使用。


    判断:

    依然很简单。


    简答:

    1.如何将一个顺序的单链表逆序?
    2.20个结点折半二叉树,叶子节点都是哪几个。
    3.给你几行数列,问这是什么排序方法。
    4.构造哈夫曼树,求平均路径。
    5.普里姆算法求最小生成树的构造。


    编程:

    1.在一个有序链表中插入一个数字,让它依然有序。
    2.在不考虑空间的情况下,将链表中大于第一个结点的结点放到左边,小于这个结点的放到右边。(类似于火车调度算法)

    相关文章

      网友评论

        本文标题:2017数据结构

        本文链接:https://www.haomeiwen.com/subject/bpezcctx.html