222. 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.

计算完全二叉树的节点数,如果直接遍历并计算的话会是O(n)的时间复杂度。
能不能充分利用完全二叉树的特性呢
如果从一个根节点开始一直向左和一直向右的深度是相等的,那么意味着这个根节点下面的数是满二叉树,其节点数直接可以算出来。
我们从根节点开始检查,如果不是满二叉树就往下递归,每找到一颗满二叉树就直接返回节点数。

var countNodes = function(root) {
    //获取二叉树一直向左或向右的高度
    var getHeight = function(root,flag) {
        var count = 0;
        if (flag) {
            while (root.left) {
                count++;
                root = root.left;
            }
        } else {
            while (root.right) {
                count++;
                root = root.right;
            }
        }
        return count; 
    };
    if (!root) 
        return 0;
    var l = getHeight(root,true);
    var r = getHeight(root,false);
    if (l===r) {
        //如果左右高度相等,节点数等于2^树高-1
        return (2<

你可能感兴趣的:(222. Count Complete Tree Nodes)