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
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