6查詢 2伸展樹

2021-09-02 14:16:48 字數 1625 閱讀 5918

#include using namespace std;

typedef struct splaynode *tree;

struct splaynode

};tree *search_val(tree &root,int val,tree &parent)

bool insert(tree &root,int val)

return false; //插入失敗

}tree left_single_rotate(tree &root,tree node) //顯然雙旋操作中的root是不會變的

else root=node; //不存在祖父節點即原父節點為根,那麼旋轉後node為根

return node; //返回旋轉後的結點

}tree right_single_rotate(tree &root,tree node)

else root=node; //不存在祖父節點即原父節點為根,那麼旋轉後node為根

return node; //返回旋轉後的結點

}void lr_rotate(tree &root,tree node)

void rl_rotate(tree&root,tree node)

void right_double_rotate(tree &root,tree node)

void left_double_rotate(tree &root,tree node)

void up(tree &root,tree node)

void splaytree(tree &root,tree node)

bool search(tree &root,int val) //下面那行要注意->要高階於*先運算所以要括號

//if((*temp)->val==root->val)return true;//改為返回是否找到就開啟這注釋,含根情況

return false; //除去根外的結點中沒有找到,或者說沒有進行旋轉操作

}tree *find_min(tree &root)

void remove(tree &root,int val)

else if((*replace1)->rchild==null)//replace1沒有左兒子的情況只有根的右兒沒有左兒,這時find_min得右兒

}else

}}void preorder(tree root)

void inorder(tree root)

int main(){

tree root=null; //定義空根(不是指標,已在記憶體棧中申請空間

for(int i=11;i<=17;i++)insert(root,i); //插入1~18號點

伸展樹 入門

參考部落格 部落格鏈結 網上資料不少,留下自己ac 方便以後回看,用的spt模板是部落格裡的題目鏈結 題意 求最小的營業額波動總和 最小的營業額波動 min x y y是之前某天營業額 解法 插入某個數,找前序以及後序即可 include include include include includ...

伸展樹模板

include include include include define key value ch ch root 1 0 using namespace std const int maxn 200000 10 char op maxn 10 int opx maxn int s maxn e...

伸展樹模板

給定乙個數n,代表有乙個數列1 n,有下面兩種操作 cut a b c 把區間 a,b 這一段元素切下來接到新序列第c個元素的後面 flip a b 反轉區間 a,b 最後遍歷整個序列 define key val son son root 1 0 typedef long long ll cons...