leetcode[222] Count Complete Tree Nodes

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

Note:

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.

Example:

Input: 
    1
   / \
  2   3
 / \  /
4  5 6

Output: 6

题目大意:

计算完全二叉树树的节点数

解法:

采用中序遍历树的方法,遍历到一个节点,节点数目增加。但是这种做法并没有使用到完全二叉树树的特性。

Java:

class Solution {
    int count=0;

    public int countNodes(TreeNode root) {
        if(root==null) return 0;
        countNodes(root.left);
        count++;
        countNodes(root.right); 
        
        return count;
    }
}

不停的向左走可以找到树的高度,单个节点树的高度为0,如果整个树为空,那么树的高度是-1。

每次只需要检查右子树树高是不是h-1,如果是,说明左子树是一个完全二叉树,节点数是2^h+右子树节点数

如果不是,说明右子树是一个完全二叉树,节点数是2^(h-1)+左子树节点数

class Solution {
    private int height(TreeNode root){
        if(root==null) return -1;
        return 1+height(root.left);
    }
    
    public int countNodes(TreeNode root) {
        int nodes=0;
        int h=height(root);
        while(root!=null){
            if(height(root.right)==h-1){
                nodes+=1<<h;
                root=root.right;
            }else{
                nodes+=1<<h-1;
                root=root.left;
            }
            h--;
        }
        return nodes;
    }
}

  

上一篇:Docker安装RabbitMQ


下一篇:Vue用velocity.js的动画