完全二叉树计数

作者: IT_Matters | 来源:发表于2016-07-07 16:28 被阅读133次

给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。
给定树的根结点root,请返回树的大小。

思路

先计算出左右子树的高度leftSubHgtrightSubHgt.
如果leftSubHgtrightSubHgt相等,说明左子树一定是一颗满二叉树,满二叉树在求得其高度的情况下可以算出总结点的数量, 此外可以对右子树进行递归调用,求得其节点数量.再加上根节点,就可以算出结果.
如果leftSubHgtrightSubHgt不相等,说明右子树一定是一颗满二叉树.同理对左子树进行递归处理,最后也可得结果.

import java.util.*;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}*/
public class CountNodes {
    public int count(TreeNode root) {
        if(root==null)return 0;
        int leftSubHgt= TreeHieght(root.left);
        int rightSubHgt= TreeHieght(root.right);
        
        if(leftSubHgt==rightSubHgt){
            return 1+allNodes(leftSubHgt)+count(root.right);
        }
        else{
            return 1+allNodes(rightSubHgt)+count(root.left);
        }
    }
    
    //计算完全二叉树的高度,根节点为1
    private int TreeHieght(TreeNode node){       
        int height=0;
        while(node!=null){
            node=node.left;
            height++;
        }
        return height;
    }
    
    //计算高度为h的完全二叉树的节点数量
    private int allNodes(int h){
        return (int)Math.pow(2,h)-1;
    }
}

相关文章

  • 完全二叉树计数

    给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)...

  • 6_7 完全二叉树计数

    给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)...

  • 958. 二叉树的完全性检验

    判断是否是完全二叉树 给定一个二叉树,确定它是否是一个完全二叉树。 百度百科中对完全二叉树的定义如下: 若设二叉树...

  • 222. 完全二叉树的节点个数

    222. 完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉...

  • 完全二叉树实现优先队列与堆排序

    本文的目标是要做出优先队列和堆排序两个Demo。 完全二叉树 优先队列 堆排序 完全二叉树 完全二叉树的定义是建立...

  • 完全二叉树的节点个数

    给出一个完全二叉树,求出该树的节点个数。 说明: [完全二叉树]定义如下:在完全二叉树中,除了最底层节点可能没填满...

  • 222. Count Complete Tree Nodes

    完全二叉树的节点的个数。 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下...

  • 222. 完全二叉树的节点个数

    给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底...

  • LeetCode-222-完全二叉树的节点个数

    完全二叉树的节点个数 题目描述:给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义...

  • 认识二叉堆

    什么是二叉堆? 二叉堆本质上是一种完全二叉树( 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引...

网友评论

    本文标题:完全二叉树计数

    本文链接:https://www.haomeiwen.com/subject/oksljttx.html