84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
java实现伸展树
中的splay(Comparable key)方法,第198行:
splay(Comparable key)
l.right = t; /* link left */ l = t; t = t.right;
不能理解l=t;前面的l.right = t不就是被覆盖掉了吗?
l=t;
l.right = t
人生最曼妙的风景,竟是内心的淡定与从容!
ここでは、2 つの参照 l と t が動いているだけです:
l が元々ノード a を指しており、a の左ノードと右ノードがそれぞれ a1 と a2 であるとします。 t はもともとノード b を指しており、b の左ノードと右ノードはそれぞれ b1 と b2 です
l.right = t、l は a を指します。この操作は、a の右ノードが b になり、l は依然として a を指し、t は依然として b を指します
l = t、l は b を指すように変更され、t は変更されずに b を指す
l = t
t = t.right、t は元々 b を指していましたが、現在は b の右ノード、つまり b2
t = t.right
このパスの後、a の左側のノードは変化せず a1 のままで、右側のノードは b になり、a2 は a から切断されます。これは、レッスン b のサブツリーを a の右に移動することと同じです。 同時に l と t の方向が変わり、l は b を指し、t は b2 を指します
l = t; は次のようにみなされます:l = l.right;ポインタの移動により 1 回の反復が容易になります。
ここでは、2 つの参照 l と t が動いているだけです:
l が元々ノード a を指しており、a の左ノードと右ノードがそれぞれ a1 と a2 であるとします。 t はもともとノード b を指しており、b の左ノードと右ノードはそれぞれ b1 と b2 です
l.right = t
、l は a を指します。この操作は、a の右ノードが b になり、l は依然として a を指し、t は依然として b を指しますl = t
、l は b を指すように変更され、t は変更されずに b を指すt = t.right
、t は元々 b を指していましたが、現在は b の右ノード、つまり b2このパスの後、a の左側のノードは変化せず a1 のままで、右側のノードは b になり、a2 は a から切断されます。これは、レッスン b のサブツリーを a の右に移動することと同じです。
同時に l と t の方向が変わり、l は b を指し、t は b2 を指します
l = t;
は次のようにみなされます:
l = l.right;
ポインタの移動により 1 回の反復が容易になります。