Saturday, March 7, 2015

Print all path from root to leaf

print all paths from root to leaf in a binary tree in java.
Below diagram will show all paths  from root to leaf:

Solution: recursion
Steps for print all paths from root to leaf are:
  • If node is null then return 0
  • put node.val in array and increment len by 1.
  • If encounterd leaf node(i.e. node.left is null and node.right is null) then print array.
  • Recursively visit left subtree and right subtree
Run time complexity is O(n).
Code for recursion part:
public static void printPath(TreeNode root, int[] path, int len) {
		if(root == null) {
			return;
		}
		
		path[len] = root.val;  //store node's value in array 
		len++;
		
		if(root.left == null && root.right == null) {  //if node is leaf, then print the path
			printArray(path, len);
			return;
		}
		
		printPath(root.left, path, len);
		printPath(root.right, path, len);
	}
	
	public static void printArray(int[] path, int len) {
		for(int i = 0; i < len; i++) {
			System.out.print(path[i] + " ");
		}
		System.out.println();
	}

完整代码:
package leetcode;

public class PrintAllPathFromRootToLeaf {
	public static class TreeNode {
		int val;
		TreeNode left, right;
		TreeNode(int val) {
			this.val = val;
		}
	}
	
	public static TreeNode createBinaryTree() {
		/* Constructed binary tree is
			        40
			      /   \
			    20     60
			  /  \    /  \
	 		 10   30 50   70
	 		/		   \
	 	   5			55
		*/
		TreeNode rootNode =new TreeNode(40);  
		TreeNode node20=new TreeNode(20);  
		TreeNode node10=new TreeNode(10);  
		TreeNode node30=new TreeNode(30);  
		TreeNode node60=new TreeNode(60);  
		TreeNode node50=new TreeNode(50);  
		TreeNode node70=new TreeNode(70);  
		TreeNode node5=new TreeNode(5);  
		TreeNode node55=new TreeNode(55);  
	    
		rootNode.left=node20;  
		rootNode.right=node60;  
		
		node20.left=node10;  
		node20.right=node30;  
		    
		node60.left=node50;  
		node60.right=node70;  
		node10.left=node5;  
		node50.right=node55;  
		    
		return rootNode;
	}

	
	public static void main(String[] args) {
		PrintAllPathFromRootToLeaf tree = new PrintAllPathFromRootToLeaf();
		TreeNode root = createBinaryTree();
		System.out.println("Printing all paths from root to leaf :");
		int[] path = new int[1000];
		printPath(root, path, 0);
		
	}
	
	public static void printPath(TreeNode root, int[] path, int len) {
		if(root == null) {
			return;
		}
		
		path[len] = root.val;  //store node's value in array 
		len++;
		
		if(root.left == null && root.right == null) {  //if node is leaf, then print the path
			printArray(path, len);
			return;
		}
		
		printPath(root.left, path, len);
		printPath(root.right, path, len);
	}
	
	public static void printArray(int[] path, int len) {
		for(int i = 0; i < len; i++) {
			System.out.print(path[i] + " ");
		}
		System.out.println();
	}
}

No comments:

Post a Comment