數據結構復習-樹(持續更新)


數據結構快要結課啦,自己這周就先復習一下樹吧!

題目是選於自己的PTA的作業題,博客的主要目的也是為了自己的結課考試鴨!

最后面也會寫上自己的預測考點

知識點一:廣義表

1.設廣義表L=((a,b,c)),則L的長度和深度分別為( ) (2分)

         注:廣義表的深度:簡單的說就是括號的數量

     廣義表的長度:簡單的說就是廣義表中元素的數量,但是一個原子可以是一個元素,一個子表也算是一個元素。(空表的長度是0)

2.廣義表A=(a,b,(c,d),(e,(f,g))),則式子Head(Tail(Head(Tail(Tail(A)))))的值為()。 (2分)

        注:Head()操作取第一個原子(可以是一個子集也可以是單個元素)

               Tail()操作除了第一個原子的剩下的原子的集合,要用括號括起來的

知識點二:數組

1.三對角矩陣

 

2.行優先:行的下表變化得慢        列優先:列的下表變化得滿

3.鄰接矩陣的行優先和列優先存儲一定要注意呀

知識點三:二叉樹

1.設樹T的度為4,其中度為1、2、3、4的結點個數分別為4、2、1、1。則T中有多少個葉子結點? (3分)

        注:若一棵樹的度為n,那么其結點數為n+1;

2.求二叉樹最大深度

//求樹的深度
int Depth(BiTree T)
{
    if(!T)   return 0;
    else
    {
        int h1=Depth(T->lchild);
        int h2=Depth(T->rchild);
        return h1>h2?h1+1:h2+1;
    }
}

求二叉樹最小深度

最小深度:樹的根節點到任意一個葉子節點的最小距離

class Solution {
public:
    //求樹的深度
    int run(TreeNode *root) {
        //邊界條件
        if(!root)
            return 0;
        if(!root->left)
            return root->right+1;
        if(!root->right)
            return root->left+1;
        else 
        {
            int leftDepth = run(root->left);
            int rightDepth = run(root->right);
            return (leftDepth<rightDepth)?(leftDepth+1):(rightDepth+1);
        }
    }
};

 

3.有一個四叉樹,度2的結點數為2,度3的結點數為3,度4的結點數為4。問該樹的葉結點個數是多少?(2分)

4.如果一棵非空k(k2)叉樹T中每個非葉子結點都有k個孩子,則稱T為正則k叉樹。若T的高度為h(單結點的樹h=1),則T的結點數最少為:(3分)

         注:咦?為什么這個公式出不來呢?

                自己還是沒有分析出來,感覺這樣推導公式的題還是用排除法會好一點,也更快一點


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM