I can not understand how splaying works.
The part that I can not follow is how we know if a: i) zig ii) zig-zag or iii) zig-zig must be done.
If I understand correctly this has to do with the current node in the path.
If it is the root's child then it is a zig otherwise either (ii) or (iii) depending on if the parent of current node and current node are both left (or right) children. Ok so far.
Now the part I don't get:
As we move down isn't the process to "remove" the intermediate nodes into left and right subtrees so that we have a middle tree that will be eventually the root of the item under search?
Then if we start from a tree we would be doing continually zig and nothing else since we are removing elements and are always at the root.
Example:

If for example I am looking for 20 I would start at the root and go left. So the current node has root as parent and I do a zig. Now what happens?? I am at 26 and go left but isn't 26 also root? So should I be doing a zig?
But from what I see in this example a zig-zag is being done and I can not understand why.
Any help here?
Can not figure out how splaying works
422 views Asked by Cratylus At
1
There are 1 answers
Related Questions in ALGORITHM
- MCNP 6 - Doubts about cells
- Given partially sorted array of type x<y => first apperance of x comes before first of y, sort in average O(n)
- What is the algorithm behind math.gcd and why it is faster Euclidean algorithm?
- Purpose of last 2 while loops in the merge algorithm of merge sort sorting technique
- Dots and Boxes with apha-beta pruning
- What is the average and worst-case time complexity of my string searching algorithm?
- Building a School Schedule Generator
- TC problem 5-2:how to calculate the probability of the indicator random variable?
- LCA of a binary tree implemented in Python
- Identify the checksum algorithm
- Algorithm for finding a subset of nodes in a weighted connected graph such that the distance between any pair nodes are under a postive number?
- Creating an efficent and time-saving algorithm to find difference between greater than and lesser than combination
- Algorithm to find neighbours of point by distance with no repeats
- Asking code suggestions about data structure and algorithm
- Heap sort with multithreading
Related Questions in DATA-STRUCTURES
- Why is the runtime for this O(n)?
- Purpose of last 2 while loops in the merge algorithm of merge sort sorting technique
- What is the problem in my "sumAtBis" code?
- Asking code suggestions about data structure and algorithm
- What would be the most efficient way to store multiple sets of fixed arrays (std::vector)?
- About Suffix Trees features
- Getting wrong answer in Binary Search solution
- Are there techniques to mathematically compute the amount of searching in greedy graph searching?
- AVL tree Nth largest operation - How to have all my tests pass? JAVA
- Why does the map size change?
- Complexity in Union of disjointed sets with lists
- Hash collisions in Golang map resolving
- C++ ordered map optimized with index access
- How to sort this list of strings along with the strings and output the result as expected?
- Why deleting an element in a linkedlist costs O(1)
Related Questions in BINARY-TREE
- C++: Program for Deleting a node and return its right child:
- What is the problem in my "sumAtBis" code?
- Binary Tree preorder traversal understanding
- check if object is a binary tree in prolog
- Represent a full, but not complete, binary tree with an array structure
- Perfect binary tree in order and pre order automatic indexing
- Binary Trees Changing Node vs Changing Value of Nodes
- How to create Tree Zipper using Rust?
- in Lua, how to write an iterator for a binary tree?
- A straightforward recursive level-order traversal method?
- Creating an instance of a Binary Tree (Programming Standard ML by Robert Harper)
- Debugging AVL Tree Deletion: Unbalanced Node Not on Deletion Path
- What is the maximum degree of imbalance in a red black tree ? Is it height/2?
- Wrong output when checking whether binary tree is balanced
- Why the height of segment tree is O(logn)
Related Questions in BINARY-SEARCH-TREE
- C++: Program for Deleting a node and return its right child:
- I can't get the specific node of BST using recursion . i.e. every stack it erase
- Why is my traversing in BST not showing the results like the sample output?
- Binary Trees Changing Node vs Changing Value of Nodes
- BST Inorder to Preorder and Postorder
- Binary Search Tree - parent node method incorrect output
- Binary Search Tree - node count method with an incorrect output
- Binary Search Tree (BST) - array representations
- Return more than one int value
- Lowest Common Ancestor Of A Binary Search Tree failing at a long input case
- Removing final node in a BST causing fault
- i am performing deletion operation in BST as i am deleting node recursively and not
- Why output of my BST-validating function is false?
- What is the most efficient way to implement 2 data structures for iteration of different values
- Recurrence Relation for Full Binary Tree
Related Questions in SPLAY-TREE
- Lost on splay tree implementation
- SplayTreeSet contains duplicate values
- Splay Tree insertion time efficiency with different input cases
- Get the index upon insertion in SplayTreeSet in dart
- How do implement a remove function in a splay tree?
- Time complexity of Map containsKey and containsValue in Dart
- Looping over a SplayTreeMap doesn't give values with duplicated keys
- Bottom up Splay trees vs Top down splay trees
- Is there a better way to do a self-reference pointer in the base class that also works in derived classes?
- How can I design this function to work in logarithmic time?
- How to delete min element in splay tree
- Implementing a splay tree
- Splay Tree Implementation
- Why is amortized analysis of splay tree only focusing on the splay operation and not accounting for the downwards search
- Why is splay tree in textbook different than mine?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
By root they mean root of the entire tree, not root of the subtree you are splaying. So, in your example 12 is the root of the entire tree.
...
If you'd like an example to work from, I coded up a SplayTree in Java recently. You can find the code here.
The big thing with splay tree's is they move the most recently inserted/queried node up (at most) two levels in the tree. You have to perform a zig, zig-zig, or zig-zag based on it's grand parent and parent node locations.
When a node x is accessed, a splay operation is performed on x to move it to the root. To perform a splay operation we carry out a sequence of splay steps, each of which moves x closer to the root.
The three types of splay steps are: (g = grand parent, p = parent, and x = node to splay)
http://en.wikipedia.org/wiki/Splay_tree
Below is splaying of node 3 in the tree.
Tree before splaying:
After a (right->left) Zig-Zag to node 3.
After another (left->right) Zig-Zag to node 3.
After a (left->left) Zig-Zig to node 3.
After a (right) Zig to node 3. Now time to stop since 3 is in the root position.
If you try and access node 3 again in the Tree, it would not have to be splayed since it's already in the root position.