追加するときは以下の様な動きになります。要素を根に挿入する先程は葉に要素を追加する関数を紹介しましたが、少し手間を加えることで要素を根に挿入する(追加した頂点が新たな根になる)関数を作ることもできます。根挿入のメリットは、最近追加した頂点が上の方に来ることです。実世界では最近追加したものを探したい場面はしばしば訪れるので、この性質は有用です。要素を根に挿入するには、まず通常通り要素を葉に置いてから、それを回転操作によって根まで持ちあげるというステップを取ります。回転操作には左回転と右回転があります。自分の右の子を、左に回転して「持ち上げ」る操作です。自分の右のリンクは、元々の右の子の左を指すようにします。実装は以下のとおりです。自分の左の子を、右に回転して「持ち上げ」る操作です。自分の左のリンクは、元々の左の子の右を指すようにします。実装は以下のとおりです。tmpendこれらの回転関数を使うことで、根挿入の関数を作ることができます。rootend少し実装がトリッキーですが、やってることは図示すると以下のとおりです。おいて、データの入る順番が偏るとまずいことになります。なり、探索したり、要素を新しく入れたりする最悪コストが高くなってしまいます。そこで、左右の高さがなんとかバランスするようにして、木の高さを抑える試みが成されています。Tree)と呼びます。平衡木にはいくつか種類がありますが、今回はそのうちランダム挿入二分探索木Treapを紹介します。なることはほとんどありません。これを実現するために、要素を追加するときに少し工夫をします。その工夫とは要素を追加するときに、ランダムで根に挿入するか、通常通り挿入するか決めるということです。