1. 程式人生 > >二叉樹的節點個數、葉子節點個數、第k層的節點個數

二叉樹的節點個數、葉子節點個數、第k層的節點個數

 class BinaryTreeNode {
 	int val;
 	BinaryTreeNode left = null;
 	BinaryTreeNode right = null;
 }
  
 public class NodesStatistics {
 	/**
 	 * 求二叉樹的節點個數
 	 * (1)如果二叉樹為空,節點個數為0;
 	 * (2)如果二叉樹不為空,二叉樹節點個數 = 左子節點個數 + 右子節點個數 + 1。
 	 * @param root 根節點
 	 * @return 節點個數
 	 */
 	public int getNodesNum(BinaryTreeNode root)
{ if(root == null) return 0; return getNodesNum(root.left) + getNodesNum(root.right) + 1; } /** * 求二叉樹中葉子節點的個數 * (1)如果二叉樹為空,返回0; * (2)如果二叉樹不為空,返回1; * (3)如果二叉樹不為空,且左右子樹不同時為空,返回左子樹中葉子節點個數加上右子樹中葉子節點個數。 * @param root 根節點 * @return 葉子節點個數 */ public int getLeafNum(BinaryTreeNode root)
{ if(root == null) return 0; if(root.left == null && root.right == null) return 1; int leftNums = getLeafNum(root.left); int rightNums = getLeafNum(root.right); return leftNums + rightNums; } /** * 求二叉樹第k層的節點個數,假設根節點為第0層 * @param root 根節點 * @param k 第k層 * @return 第k層的節點個數 */
public int getNodeNumsOnKthLevel(BinaryTreeNode root, int k) { if(root == null || k < 0) return 0; if(k == 0) return 1; int leftNodeNums = getNodeNumsOnKthLevel(root.left, k-1); int rightNodeNums = getNodeNumsOnKthLevel(root.right, k-1); return leftNodeNums + rightNodeNums; } } ```