二叉樹的節點個數、葉子節點個數、第k層的節點個數
阿新 • • 發佈:2018-12-10
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;
}
}
```