YouTip LogoYouTip

Binary Search Level Traverse

## Binary Search Tree Level Order Traversal The level-order traversal of a binary search tree, also known as level-by-level traversal, means storing the nodes of each level in a queue, then performing dequeue (taking out nodes) and enqueue (storing the next level's nodes) operations to achieve the purpose of traversal. **Introducing a queue to support level-order traversal:** * If the root node is null, there is nothing to traverse; * If the root node is not null: * First, enqueue the root node; * As long as the queue is not empty: * Dequeue the front node and traverse it; * If the front node has a left child, enqueue the left child; * If the front node has a right child, enqueue the right child; The following demonstrates the steps in order: **(1)** First, take out the root node and put it into the queue !(#) **(2)** Take out 29, enqueue the left and right child nodes !(#) **(3)** Dequeue 17 from the front, enqueue child nodes 14 and 23. !(#) **(4)** Dequeue 31, enqueue child nodes 30 and 43 !(#) **(5)** Finally, dequeue all !(#) Core code example: ... // Level-order traversal of binary search tree public void levelOrder(){ // We use LinkedList as our queue LinkedList q =new LinkedList(); q.add(root); while(!q.isEmpty()){ Node node = q.remove(); System.out.println(node.key); if( node.left!=null) q.add( node.left); if( node.right!=null) q.add( node.right); } } ... ### Java Example Code **Source Package Download:*## src/tutorial/binary/LevelTraverse.java File Code: package tutorial.binary; import java.util.LinkedList; /** * Level Order Traversal */ public class LevelTraverse<Key extends Comparable, Value>{ // The nodes in the tree are private class, the outside world does not need to know the specific implementation of binary search tree nodes private class Node { private Key key; private Value value; private Node left, right; public Node(Key key, Value value){ this.key= key; this.value= value; left = right =null; } } private Node root;// Root node private int count;// Number of nodes in the tree // Constructor, construct an empty binary search tree by default public LevelTraverse(){ root =null; count =0; } // Return the number of nodes in the binary search tree public int size(){ return count; // Return whether the binary search tree is empty public boolean isEmpty(){ return count ==0; } // Insert a new (key, value) data pair into the binary search tree public void insert(Key key, Value value){ root = insert(root, key, value); } // Check whether key exists in the binary search tree public boolean contain(Key key){ return contain(root, key); } // Search for the value corresponding to key in the binary search tree. If the value does not exist, return null public Value search(Key key){ return search( root , key ); } // Pre-order traversal of binary search tree public void preOrder(){ preOrder(root); } // In-order traversal of binary search tree public void inOrder(){ inOrder(root); } // Post-order traversal of binary search tree public void postOrder(){ postOrder(root); } // Level-order traversal of binary search tree public void levelOrder(){ // We use LinkedList as our queue LinkedList q =new LinkedList(); q.add(root); while(!q.isEmpty()){ Node node = q.remove(); System.out.println(node.key); if( node.left!=null) q.add( node.left); if( node.right!=null) q.add( node.right); } } //******************** //* Helper functions for binary search tree //******************** // Insert node (key, value) into the binary search tree with node as root, using recursive algorithm // Return the root of the binary search tree after inserting the new node private Node insert(Node node, Key key, Value value){ if( node ==null){ count ++; return new Node(key, value); } if( key.compareTo(node.key)==0) node.value= value; else if( key.compareTo(node.key) node->key node.right= insert( node.right, key, value); return node; } // Check whether the binary search tree with node as root contains a node with key value, using recursive algorithm private boolean contain(Node node, Key key){ if( node ==null) return false; if( key.compareTo(node.key)==0) return true; else if( key.compareTo(node.key) node->key return contain( node.right , key ); } // Find the value corresponding to key in the binary search tree with node as root, recursive algorithm // If value does not exist, return NULL private Value search(Node node, Key key){ if( node ==null) return null; if( key.compareTo(node.key)==0) return node.value; else if( key.compareTo(node.key) node->key return search( node.right, key ); } // Pre-order traversal of binary search tree with node as root, recursive algorithm private void preOrder(Node node){ if( node !=null){ System.out.println(node.key); preOrder(node.left); preOrder(node.right); } } // In-order traversal of binary search tree with node as root, recursive algorithm private void inOrder(Node node){ if( node !=null){ inOrder(node.left); System.out.println(node.key); inOrder(node.right); } } // Post-order traversal of binary search tree with node as root, recursive algorithm private void postOrder(Node node){ if( node !=null){ postOrder(node.left); postOrder(node.right); System.out.println(node.key); } } }
← Binary Search FeatureBinary Search Tree Search β†’