computer notes - recursive
DESCRIPTION
We can implement non-recursive versions of the preorder, inorder and post order traversal by using an explicit stack. The stack will be used to store the tree nodes in the appropriate order. Here, for example, is the routine for inorder traversal that uses a stack.TRANSCRIPT
![Page 1: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/1.jpg)
Class No.14
Data Structures
http://ecomputernotes.com
![Page 2: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/2.jpg)
Recursive Call
Recall that a stack is used during function calls.
The caller function places the arguments on the stack and passes control to the called function.
Local variables are allocated storage on the call stack.
Calling a function itself makes no difference as far as the call stack is concerned.
http://ecomputernotes.com
![Page 3: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/3.jpg)
Stack Layout during a call Here is stack layout when function F calls
function F (recursively):
Parameters(F)
Local variables(F)
Return address(F)
Parameters(F)
Parameters(F)
Local variables(F)
Return address(F)
Parameters(F)
Local variables(F)
Return address(F)
Parameters(F)
Local variables(F)
Return address(F)
During execution of F After callAt point of call
sp
sp
sp
http://ecomputernotes.com
![Page 4: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/4.jpg)
Recursion: preorderpreorder(14)14..preorder(4)4....preorder(3)3......preorder(null)......preorder(null)....preorder(9)9......preorder(7)7........preorder(5)5..........preorder(null)..........preorder(null)........preorder(null)......preorder(null)
14
4
9
7
3
5
15
16
17
18
20
http://ecomputernotes.com
![Page 5: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/5.jpg)
Recursion: preorder..preorder(15)15....preorder(null)....preorder(18)18......preorder(16)16........preorder(null)........preorder(17)17..........preorder(null)..........preorder(null)......preorder(20)20........preorder(null)........preorder(null)
14
4
9
7
3
5
15
16
17
18
20
http://ecomputernotes.com
![Page 6: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/6.jpg)
Recursion: inorderinorder(14)..inorder(4)....inorder(3)......inorder(null)3......inorder(null)4....inorder(9)......inorder(7)........inorder(5)..........inorder(null)5..........inorder(null)7........inorder(null)9......inorder(null)14
14
4
9
7
3
5
15
16
17
18
20
http://ecomputernotes.com
![Page 7: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/7.jpg)
Recursion: inorder..inorder(15)....inorder(null)15....inorder(18)......inorder(16)........inorder(null)16........inorder(17)..........inorder(null)17..........inorder(null)18......inorder(20)........inorder(null)20........inorder(null)
14
4
9
7
3
5
15
16
17
18
20
http://ecomputernotes.com
![Page 8: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/8.jpg)
Non Recursive Traversal
We can implement non-recursive versions of the preorder, inorder and postorder traversal by using an explicit stack.
The stack will be used to store the tree nodes in the appropriate order.
Here, for example, is the routine for inorder traversal that uses a stack.
http://ecomputernotes.com
![Page 9: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/9.jpg)
Non Recursive Traversal
void inorder(TreeNode<int>* root){ Stack<TreeNode<int>* > stack; TreeNode<int>* p; p = root; do { while( p != NULL ) { stack.push( p ); p = p->getLeft(); } // at this point, left tree is empty
http://ecomputernotes.com
![Page 10: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/10.jpg)
Non Recursive Traversal
void inorder(TreeNode<int>* root){ Stack<TreeNode<int>* > stack; TreeNode<int>* p; p = root; do { while( p != NULL ) { stack.push( p ); p = p->getLeft(); } // at this point, left tree is empty
http://ecomputernotes.com
![Page 11: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/11.jpg)
Non Recursive Traversal
void inorder(TreeNode<int>* root){ Stack<TreeNode<int>* > stack; TreeNode<int>* p; p = root; do { while( p != NULL ) { stack.push( p ); p = p->getLeft(); } // at this point, left tree is empty
http://ecomputernotes.com
![Page 12: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/12.jpg)
Non Recursive Traversal
if( !stack.empty() ){
p = stack.pop(); cout << *(p->getInfo()) << " ";
// go back & traverse right subtree
p = p->getRight(); }
} while ( !stack.empty() || p != NULL );}
http://ecomputernotes.com
![Page 13: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/13.jpg)
Non Recursive Traversal
if( !stack.empty() ){
p = stack.pop(); cout << *(p->getInfo()) << " ";
// go back & traverse right subtree
p = p->getRight(); }
} while ( !stack.empty() || p != NULL );}
http://ecomputernotes.com
![Page 14: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/14.jpg)
Non Recursive Traversal
if( !stack.empty() ){
p = stack.pop(); cout << *(p->getInfo()) << " ";
// go back & traverse right subtree
p = p->getRight(); }
} while ( !stack.empty() || p != NULL );}
http://ecomputernotes.com
![Page 15: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/15.jpg)
Non Recursive Traversal
if( !stack.empty() ){
p = stack.pop(); cout << *(p->getInfo()) << " ";
// go back & traverse right subtree
p = p->getRight(); }
} while ( !stack.empty() || p != NULL );}
http://ecomputernotes.com
![Page 16: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/16.jpg)
Nonrecursive Inorderpush(14)..push(4)....push(3)34..push(9)....push(7)......push(5)57914push(15)15push(18)..push(16)16..push(17)1718push(20)20
14
4
9
7
3
5
15
16
17
18
20
http://ecomputernotes.com
![Page 17: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/17.jpg)
Traversal Tracerecursive inorderinorder(14)..inorder(4)....inorder(3)34..inorder(9)....inorder(7)......inorder(5)57914inorder(15)15inorder(18)..inorder(16)16..inorder(17)1718inorder(20)20
nonrecursive inorderpush(14)..push(4)....push(3)34..push(9)....push(7)......push(5)57914push(15)15push(18)..push(16)16..push(17)1718push(20)20
http://ecomputernotes.com
![Page 18: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/18.jpg)
Traversal Tracerecursive inorderinorder(14)..inorder(4)....inorder(3)34..inorder(9)....inorder(7)......inorder(5)57914inorder(15)15inorder(18)..inorder(16)16..inorder(17)1718inorder(20)20
nonrecursive inorderpush(14)..push(4)....push(3)34..push(9)....push(7)......push(5)57914push(15)15push(18)..push(16)16..push(17)1718push(20)20
http://ecomputernotes.com
![Page 19: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/19.jpg)
Traversal Tracerecursive inorderinorder(14)..inorder(4)....inorder(3)34..inorder(9)....inorder(7)......inorder(5)57914inorder(15)15inorder(18)..inorder(16)16..inorder(17)1718inorder(20)20
nonrecursive inorderpush(14)..push(4)....push(3)34..push(9)....push(7)......push(5)57914push(15)15push(18)..push(16)16..push(17)1718push(20)20
http://ecomputernotes.com
![Page 20: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/20.jpg)
Traversal Tracerecursive inorderinorder(14)..inorder(4)....inorder(3)34..inorder(9)....inorder(7)......inorder(5)57914inorder(15)15inorder(18)..inorder(16)16..inorder(17)1718inorder(20)20
nonrecursive inorderpush(14)..push(4)....push(3)34..push(9)....push(7)......push(5)57914push(15)15push(18)..push(16)16..push(17)1718push(20)20
http://ecomputernotes.com
![Page 21: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/21.jpg)
Level-order Traversal
There is yet another way of traversing a binary tree that is not related to recursive traversal procedures discussed previously.
In level-order traversal, we visit the nodes at each level before proceeding to the next level.
At each level, we visit the nodes in a left-to-right order.
http://ecomputernotes.com
![Page 22: Computer notes - Recursive](https://reader033.vdocuments.us/reader033/viewer/2022061210/54907e26b47959fd158b49e8/html5/thumbnails/22.jpg)
Level-order Traversal
Level-order: 14 4 15 3 9 18 7 16 20 5 17
14
4
9
7
3
5
15
18
16 20
17
http://ecomputernotes.com