Presentation is loading. Please wait.

Presentation is loading. Please wait.

Rotating Nodes How to balance a node that has become unbalanced after the addition of one new node.

Similar presentations


Presentation on theme: "Rotating Nodes How to balance a node that has become unbalanced after the addition of one new node."— Presentation transcript:

1 Rotating Nodes How to balance a node that has become unbalanced after the addition of one new node.

2 Detect Imbalance If ( a new node is added to either of node N's children ) rebalance( N )

3 Node rebalance( Node N ) int diff = N.left.getHeight() - N.right.getHeight(); if ( diff > 1 ) if ( N.left.left.getHeight() > N.left.right.getHeight() ) N = rotateRight( N ) else N = rotateLeftRight( N ) else if ( diff < -1 ) if ( N.right.right.getHeight() > N.right.left.getHeight() ) N = rotateLeft( N ) else N = rotateRightLeft( N ) // else, no rebalancing necessary return N

4 Balanced Search Trees 6060 7575 40 50 705 85 4520 6060 7575 50 705 85 6060 6565 50 5

5 UnBalanced Search Trees 6060 50 5 6060 7575 40 50 20 2525 6060 7575 50 6585 7070 3 2 2

6 Unbalanced as result of adding a new node to the left subtree of the left subtree return results of a single rotate right 45 50 40 unbalanced Node rotateRight( Node nodeN ) nodeC = nodeN.left nodeN.left = nodeC.right nodeC.right = nodeN return nodeC nodeN nodeC balanced 45 50 40

7 Unbalanced as result of adding a new node to the right subtree of the right subtree return results of a single rotate left 45 40 50 unbalanced Node rotateLeft( Node nodeN ) nodeC = nodeN.right nodeN.right = nodeC.left nodeC.left = nodeN return nodeC nodeN nodeC balanced 45 50 40

8 Unbalanced as result of adding a new node to the left subtree of the right subtree return results of a right-left rotate Node rotateRightLeft( Node nodeN ) nodeC = nodeN.right nodeN.right = rotateRight(nodeC) return rotateLeft(nodeN) 50 40 45 unbalanced nodeN nodeC balanced 45 40 50 45 50 40

9 Unbalanced as result of adding a new node to the right subtree of the left subtree return results of a left-right rotate Node rotateLeftRight( Node nodeN ) nodeC = nodeN.left nodeN.left = rotateLeft(nodeC) return rotateRight(nodeN) balanced 40 50 45 unbalanced nodeN nodeC 45 50 40 45 50 40


Download ppt "Rotating Nodes How to balance a node that has become unbalanced after the addition of one new node."

Similar presentations


Ads by Google