java - 伸展树的展开的理解
黄舟
黄舟 2017-04-18 09:51:27
0
2
360

java实现伸展树

中的splay(Comparable key)方法,第198行:

l.right = t;           /* link left */
l = t;
t = t.right;

不能理解l=t;前面的l.right = t不就是被覆盖掉了吗?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(2)
左手右手慢动作

ここでは、2 つの参照 l と t が動いているだけです:

  1. l が元々ノード a を指しており、a の左ノードと右ノードがそれぞれ a1 と a2 であるとします。 t はもともとノード b を指しており、b の左ノードと右ノードはそれぞれ b1 と b2 です

  2. l.right = t、l は a を指します。この操作は、a の右ノードが b になり、l は依然として a を指し、t は依然として b を指します

  3. l = t、l は b を指すように変更され、t は変更されずに b を指す

  4. t = t.right、t は元々 b を指していましたが、現在は b の右ノード、つまり b2

  5. を指しています。

このパスの後、a の左側のノードは変化せず a1 のままで、右側のノードは b になり、a2 は a から切断されます。これは、レッスン b のサブツリーを a の右に移動することと同じです。
同時に l と t の方向が変わり、l は b を指し、t は b2 を指します

いいねを押す +0
左手右手慢动作


l = t;
は次のようにみなされます:
l = l.right;
ポインタの移動により 1 回の反復が容易になります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!