Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.
给定一个完全二叉树,让我们输出二叉树中节点的个数。我们知道一个满二叉树的节点个数是2^k - 1 (k 为二叉树的高度), 我们设定两个标志left 和right,代表当前节点的左侧和右侧的高度是否被计算过,它们通过left和right的值来判断当前子树是否为满二叉树,因为如果为满二叉树,我们就可以用公式计算出它的节点个数,如果left和right的值不相等,我们就递归循环这个过程。代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int countNodes(TreeNode root) { if(root == null) return 0; return getCount(root, 0, 0); } public int getCount(TreeNode root, int lCount, int rCount) { if(lCount == 0) { lCount = 0; TreeNode cur = root; while(cur != null) { lCount ++; cur = cur.left; } } if(rCount == 0) { rCount = 0; TreeNode cur = root; while(cur != null) { rCount ++; cur = cur.right; } } if(lCount == rCount) return (1 << lCount) - 1; return 1 + getCount(root.left, lCount - 1, 0) + getCount(root.right, 0, rCount - 1); } }