CC-20 : Implement ZigZag Traversal of Binary Tree.
Description:
In ZigZag traversal, at each alternate level, we traverse the current levels nodes in left-right or right-left order alternatively. Given a Binary Tree, traverse it in ZigZag manner.
Test cases and expected outputs:
| Input Parameters | Expected outputs |
|---|---|
| ZigZag traversal : 4, 7,5, 6,78,14, 16,8,33, 18, 9, |
Pseudocode:
| We will use member variable ArrayList or ArrayLists named zigZag to store the Binary Tree’s node data traversed levelwise in ZigZag manner. |
Method bfsZigZagTraversal (TreeNode root, int level):
| If root node is null, return. |
| Else:
If zigZag.size() < level, add a new current Arraylist to end of ArrayList to store the current level’s traversed nodes.
If current level is even, add node data of root to end of current ArrayList(node are being traversed from left to right).
If current level is odd, add node data of root to start of current ArrayList(node are being traversed from right to left).
Recursively call bfsZigZagTraversal () method with node’s left child and (level+1) as input parameters.
Recursively call convertToLinkedList() method with node’s right child and (level+1) as input parameters.
|
Code:
public class BinTreeZigZag{
private ArrayList< ArrayList< Integer > > zigZag=new ArrayList< ArrayList < Integer > >();
public ArrayList< ArrayList < Integer > > getZigZag() {
return zigZag;
}
public void setZigZag(ArrayList< ArrayList < Integer > > zigZag) {
this.zigZag = zigZag;
}
public void bfsZigZagTraversal(BinTreeNode root, int lvl) {
if (root==null) {return;}
if (zigZag.size() <=lvl) {zigZag.add(new ArrayList<Integer>());}
if(lvl%2==0) {
zigZag.get(lvl).add(root.getNodeData());
}else {
zigZag.get(lvl).add(0,root.getNodeData());
}
bfsZigZagTraversal(root.getLeftChild(), lvl+1);
bfsZigZagTraversal(root.getRightChild(), lvl+1);
}
}
Click here to download and run code and test cases !
| About Us | Privacy Policy | Contact us |