在Java中的二叉树中打印从root到叶子的所有路径

时间:2020-02-23 14:35:31  来源:igfitidea点击:

在本教程中,我们将看到关于在Java中的二进制树中将来自root的所有路径打印到叶子。
下图将显示从root到叶子的所有路径:

算法:

打印从root到叶子的所有路径的步骤是:

  • 如果节点为null,则返回0
  • 将node.data放入数组和增量Len 1.
  • 如果ercounterd叶节点(即node.left为null和node.right为null)然后打印阵列。
  • 递归访问左子和右子树

递归的代码将是:

//Prints all paths to leaf
 public static void printAllPathsToLeaf(TreeNode node, int[] path, int len) {
     if ( node == null )
         return;
 
     //storing data in array
     path[len] = node.data;
     len++;
 
     if(node.left == null && node.right == null) {
         //leaf node is reached
         printArray(path,len);
         return;
     }
 
     printAllPathsToLeaf(node.left, path, len);
     printAllPathsToLeaf(node.right, path, len);
 }

允许创建用于计算叶节点数的Java程序:

package org.igi.theitroad.binarytree;
 
public class BinaryTreePrintAllPaths {
 
	public static class TreeNode
	{
		int data;
		TreeNode left;
		TreeNode right;
		TreeNode(int data)
		{
			this.data=data;
		}
	}
 
	//Prints all paths to leaf
	public static void printAllPathsToLeaf(TreeNode node, int[] path, int len) {
		if ( node == null )
			return;
 
		//storing data in array
		path[len] = node.data;
		len++;
 
		if(node.left == null && node.right == null) {
			//leaf node is reached
			printArray(path,len);
			return;
		}
 
		printAllPathsToLeaf(node.left, path, len);
		printAllPathsToLeaf(node.right, path, len);
	}
 
 
	public static void main(String[] args)
	{
		//Creating a binary tree
		TreeNode rootNode=createBinaryTree();
		System.out.println("Printing all paths from root to leaf :");
		printAllPathsToLeaf(rootNode,new int[1000],0);
	}
 
	public static void  printArray(int[] path,int len)
	{
		for (int i = 0; i < len; i++) {
			System.out.print(" "+path[i]);
		}
		System.out.println();
	}
	public static TreeNode createBinaryTree()
	{
 
		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;
	}
}

运行上面的程序,我们将获取以下输出:

Printing all paths from root to leaf :
40 20 10 5 
40 20 30 
40 60 50 55 
40 60 70