#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...