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