完全二叉树计数

给定一棵完全二叉树的根节点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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,480评论 1 31
  • 给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)...
    X_Y阅读 310评论 0 0
  • 基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平...
    yhthu阅读 4,305评论 1 5
  • 概述# 二叉树是一种特殊的树型结构,它由结点的有限集合构成。 二叉树是由唯一的起始结点引出的结点集合。这个起始节点...
    长胖的鱼阅读 1,131评论 0 8
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,148评论 0 12