演算法基礎 資料結構 樹

2021-10-02 23:29:01 字數 1201 閱讀 6716

我們就先從樹的儲存看起吧。

以字母為例,先建立乙個根節點,然後向右建立子節點,並在最後的字串的結尾處進行標記。

好了,上模板**(取自acwing)

int son[n][26], cnt[n], idx;

// 0號點既是根節點,又是空節點

// son儲存樹中每個節點的子節點

// cnt儲存以每個節點結尾的單詞數量

// 插入乙個字串

void insert(char *str)

cnt[p] ++ ;

}// 查詢字串出現的次數

int query(char *str)

return cnt[p];

}

之後就是例題環節

#includeusing namespace std;

const int n = 1e5+9;

int son[n][26],cnt[n],idx;

char str[n];

void insert(char str)

cnt[p]++;

}int query(char str)

return cnt[p];

}int main()}}

這個題用暴力做不出意外應該會超時,所以應該把所給的數轉化為二進位制後建tire;

找最大異或值的方法就是找二進位制的數與之相反的數;

#includeusing namespace std;

const int n = 1e5+9;

const int m = 3e6+9;

int a[n],son[m][2],idx;

void insert(int x)

}int query(int x)

else

}return res;

}int main()

int res = 0;

for(int i=0;i

printf("%d",res);

}

資料結構與演算法基礎 樹的應用

樹這一資料結構學的差不多了,該拉出來練練了。本節學習幾個樹的應用,包括優先佇列 huffman編碼等。優先佇列是特殊的 佇列 取出元素的順序是依照元素的優先權大小,而不是元素進入佇列的順序。優先佇列要求保證 最優先元素先出 的原則。優先佇列支援兩種操作 刪除最大元素 或最小元素 和插入元素。我們將看...

資料結構基礎之樹

樹 1,一些基本概念 樹是n個結點的有限集,n 0時稱為空樹。在任意一棵非空樹中 有而且只有乙個特定的稱為根 root 的結點 當n 1時,其餘結點為m個互相不交的有限集,其中每乙個集合又是一棵樹,並且成為根的子樹。結點的分類 結點擁有的子樹稱為結點的度,度為0的結點稱為葉結點或終端結點 度不為0的...

資料結構與演算法 樹

後序遍歷 已知前序和中序求後序 設計 的原則 1 有且僅有乙個根節點 2 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...