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 best solutions below
Related Questions in ALGORITHM
- Two different numbers in an array which their sum equals to a given value
- Given two arrays of positive numbers, re-arrange them to form a resulting array, resulting array contains the elements in the same given sequence
- Time complexity of the algorithm?
- Find a MST in O(V+E) Time in a Graph
- Why k and l for LSH used for approximate nearest neighbours?
- How to count the number of ways of choosing of k equal substrings from a List L(the list of All Substrings)
- Issues with reversing the linkedlist
- Finding first non-repeating number in integer array
- Finding average of an array
- How to check for duplicates with less time in a list over 9000 elements by python
- How to pick a number based on probability?
- Insertion Sort help in javascript -- Khan Academy
- Developing a Checkers (Draughts) engine, how to begin?
- Can Bellman-Ford algorithm be used to find shorthest path on a graph with only positive edges?
- What is the function for the KMP Failure Algorithm?
Related Questions in DATA-STRUCTURES
- Borrow mutable and immutable reference in the same block
- Why would one use a heap over a self balancing binary search tree?
- Reverse linked list in java
- Doubly Linked List, MergeSort, getting undefined and unreliable results
- Difference in performance of adding elements in Treeset directly vs transferring from arraylist?
- Why the leaf node in red black tree is NIL?
- When to use double pointers?
- find the biggest possible number comprised of the digits of of a given number
- Data structure to efficiently merge up to n elements of multiset
- How to convert a string to a key for hash table
- Implement queues in java
- What does it mean to "close over" something?
- How to use hash tables when amount of slots is unknown?
- Unknown Data Structure?
- how to find type of connection between the social network entities
Related Questions in BINARY-TREE
- How to Compute Space Complexity for Printing All paths which Sum to a Given Value in Binary Tree
- Recursively divide a list that each iteration divides into two parts to get the closest sum overall
- Function that return average depth of a binary search tree
- Print a Binary Search Tree with Correct Formatting
- Recursive Tree Walk with ES6 Promise
- Making a very basic binary tree in Scala
- maximum sum of value from root to leaf in a binary tree using stack
- How to Compute Space Complexity for Binary SubTree Finding
- Scala: How to compute the sum of all elements in the leaves of a Binary Tree?
- Pass a value by reference in a function to find level of node in a binary tree
- How to implement remove() method in binary search tree iterator
- How to copy an object in Scala?
- Complex conditional filter design
- Recursively count children nodes in binary tree
- Updating value of node in Scala?
Related Questions in BINARY-SEARCH-TREE
- Why would one use a heap over a self balancing binary search tree?
- Search list for objects valid in a time range
- Couting nodes with onyl one child in BST
- Trouble implementing avl tree in java
- Find the parent node of a node in binary search tree
- Function that return average depth of a binary search tree
- Print a Binary Search Tree with Correct Formatting
- How to calculate depth of each node in Binary Search Tree?
- How to rotate Binary Tree recursion given a null stopper
- Segmentation fault when using if statement with pointers (BST tree)
- Finding the minimum and maximum height in a AVL tree, given a number of nodes?
- Binary Search Tree insertion - root remains null
- How do I go about the traversal of Binary Search Trees?
- Insert function in a Binary Search Tree
- Implementing a parent node in AVL tree
Related Questions in SPLAY-TREE
- Splay trees: how do the zig-zig and zig-zag rotations work, in details?
- C++ Implementation of Splay Tree
- Lost on splay tree implementation
- Can not figure out how splaying works
- Null pointer exception in bottom up splay tree splaying
- Using a generic Pair class and a Splaytree to count and store words and their frequencies in Java
- Testing Splay Trees
- Time complexity of Map containsKey and containsValue in Dart
- Method to Display a Splay Tree
- Implementing a splay tree
- Get the index upon insertion in SplayTreeSet in dart
- Splay Tree insertion time efficiency with different input cases
- Bottom up Splay trees vs Top down splay trees
- Looping over a SplayTreeMap doesn't give values with duplicated keys
- What is the complexity of insertion operation for 1...n keys in BST and Splay tree?
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)
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?
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.