我們就先從樹的儲存看起吧。
以字母為例,先建立乙個根節點,然後向右建立子節點,並在最後的字串的結尾處進行標記。
好了,上模板**(取自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 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...