Count Complete Tree Nodes

Given a complete binary tree, count the number of nodes.

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);
    }
}

猜你喜欢

转载自kickcode.iteye.com/blog/2277922