突發奇想的想寫一些關於樹的用法,以後把經常用到的或者覺得重要的用法都給整理下來,好複習用。
因為用得比較多的是二叉樹,所以先說一些二叉樹的性質:
性質1:二叉樹第i層上的結點數目最多為2i-1(i >= 1);
性質2:深度為k的二叉樹至多有2k-1個結點(k >= 1);
性質3:包含n個結點的二叉樹的高度(k)至少為(log2n)+1(k >= 1);
性質4:在任意一棵二叉樹中,若終端結點的個數為n0,度為2的結點數為n2,則n0 = n2 +1。
二叉樹的遍歷:
前序遍歷:根——左——右
中序遍歷:左——根——右
後序遍歷:左——右——根
滿二叉樹、完全二叉樹
一、滿二叉樹
定義:高度為k(k >= 1),且節點個數為2k-1的二叉樹,稱為滿二叉樹。
特點:最高層全為葉子節點。
二、完全二叉樹
定義:若設二叉樹的深度為k,除第k層外,其它各層 (1~k-1) 的結點數都達到最大個數,第k層所有的結點都連續集中在最左邊,這就是完全二叉樹。
特點:完全二叉樹中節點的度為1的節點個數為1或0。
用法:
①根據邊(無向圖)的關係來建立二叉樹(將邊的權值問題轉換為節點的權值問題):
edgeweight[x][y] 儲存節點x、y之間權值 tree[x][0]/[1]表示根節點x的左孩子/右孩子結點 pointweight[p]表示節點p的權值
build(root, c, lor):建立根節點root與孩子節點c的關係,lor == 0表示左孩子, lor == 1表示右孩子
在建立結點關係的時候,可以將root與c之間邊的權值儲存到子節點c中,這樣就實現了將邊的權值問題轉換為節點的權值問題了
make_tree(root):以root為根節點建立二叉樹,遍歷edgeweight[root][k(0~end)]
如果遇到root與k有邊的關係,則讓k成為root的孩子節點(第一次為左孩子,第二次為右孩子(根據題目需求來))
需要注意的是在用build建立關係時,需要在建立完成後讓edgeweight[root][k] 與 edgeweight[k][root] 的權值無效化,防止形成環
#define ineffective -1
vectorint>
> edgeweight, tree;
vector<
int> pointweight;
void
make_tree
(int root)
;void
build
(int root,
int c,
int lor)
void
make_tree
(int root)
}}
關於rbac那點事
rbac role based access control,基於角色的訪問控制 就是使用者通過角色與許可權進行關聯。簡單地說,乙個使用者擁有若干角色,每乙個角色擁有若干許可權。這樣,就構造成 使用者 角色 許可權 的授權模型。在這種模型中,使用者與角色之間,角色與許可權之間,一般者是多對多的關係。...
關於亂碼的那點事
首先如果不編碼,那些非英文abc等字元會被瀏覽器按照網頁當前的字符集進行編碼傳到伺服器去,而伺服器則只會按照伺服器配置的字符集編碼 有預設的好像就是iso x 進行解碼,所以如果網頁的字符集和伺服器字符集解碼一致那麼就不會出亂碼!但是往往對於我們來說是不一致的。所以一般情況會出現亂碼,所以就有人想到...
關於Json的那點事
說明 說明一點js是直接支援json的 所以可以直接如下寫 var a 直接是json物件 而不必 寫成 var a 這樣寫是字串 反而錯誤 所以 在.aspx 頁面輸出json的時候可以直接 前端 json格式當做回傳資料時請使用 jquery.getjson url,data callback ...