给定根节点,求完全二叉树的节点数量。

原创 2018年04月14日 22:00:35

给定根节点root--->递归方法求完全二叉树的节点个数。[时间复杂度要小于O(N) ] O(log(N)^2)

先给出线序遍历的时间复杂度为O(N)的求解方法。


1.设置全局变量记录count;前序遍历二叉树,等于记录下递归的次数。
2.时间复杂度是O(N);
public class Solution {
    private int count=0;
    public int nodeNum(TreeNode root) {
        if(root==null)
            return 0;
        if(root.left!=null){
            count++;
            nodeNum(root.left);
        }
        if(root.right !=null){
            count++;
            nodeNum(root.right);
        }
        return count+1;
    }
}

利用完全二叉树的特性 先判断 再递归
//使用递归求解
//对于节点root,找出root左子树的最左节点的深度 left;
//找出root右子树的最左节点的深度 right;
//if(leftdepth==rightdepth) 那么左子树一定是满二叉树
(这时候吧根节点root的这一个跟满二叉树算在一起 刚好是n=2^h-1+1)
//if(leftdepth>rightdepth) 那么右子树一定是满二叉树,左子树是满二叉树,递归

public class Solution {
    public int nodeNum(TreeNode root) {
       
        if(root==null)
            return 0;
        int cnt=0;
        int ldep=0;TreeNode cur=root.left;
        while(cur != null){
            ldep++;
            cur=cur.left;
        }
        int rdep=0;cur=root.right;
        while(cur!=null){
            rdep++;
            cur=cur.left;
        }
        if(ldep==rdep){
            cnt = (int)Math.pow(2,ldep)+nodeNum(root.right);
            //要加【int】incompatible types: possible lossy conversion from double to int
        }
        if(ldep>rdep){
            cnt = (int)Math.pow(2,rdep)+nodeNum(root.left);
        }
        return cnt;
    }
}

树——统计完全二叉树的节点数目

题目要求实现时间复杂度低于O(N)的解法。遍历整棵树求节点个数时间复杂度为O(N)。这里利用了完全二叉树的性质:通过比较左右子树的最左结点的高度来看哪边是满的,然后递归计算。1.首先遍历左子树最左节点...
  • jingsuwen1
  • jingsuwen1
  • 2016-07-16 10:18:34
  • 643

求完全二叉树的节点数 时间复杂度小于O(N)

给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。给定树的根结点root,请返回树的大小。二分的思想。看完全二叉树的最后的最右一...
  • stone_yw
  • stone_yw
  • 2017-04-09 21:23:49
  • 1135

完全二叉树统计节点个数【使用二分搜索】

【题目】 给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。 给定树的根结点root,请返回树的大小。 ”打眼“一看,这是...
  • FreeeLinux
  • FreeeLinux
  • 2016-12-16 02:29:27
  • 794

完全二叉树根据节点个数求叶子个数

“二叉树的第i层至多有2^(i − 1)个结点; 深度为k的二叉树至多有2^k − 1个结点(根结点的深度为1)” 因为2^9-1 完全二叉树的深度是10,前9层是一个满二叉树, 这样的话,前九...
  • lnas01
  • lnas01
  • 2014-04-24 16:41:57
  • 3295

完全二叉树的结点数计算

完全二叉树有一个很有趣的性质:结点从1开始编号,层序。那么分每一个结点(编号为i)的左孩子结点是2i,右孩子结点编号是2i+1. 反之,根据孩子结点的编号可以推知父结点的编号:孩子结点编号的下取整。...
  • u011240016
  • u011240016
  • 2016-10-12 15:24:32
  • 2599

求从根节点到叶子节点的所有路径组成的数的和

问题:给定一颗二叉树,节点的值只能为0~9中的一个,每一个从根节点到叶子节点的路径代表一个数,比如,有一个从根节点到叶子节点的路径是 1->2->3,则这个路径代表数字是123。求出从根节点到所有叶子...
  • sunzz679
  • sunzz679
  • 2015-03-26 00:01:58
  • 1757

创建完全二叉树的经验之谈.

2.二叉树 在创建二叉树时,首先我们可以通过创建树的队列,然后通过for循环遍历树的所有节点将树的节点加到该队列中去,在给各个节点赋值时,我们可以先给树的父节点-1个节点赋值,最后一个父节点我们拿出...
  • u013180692
  • u013180692
  • 2015-02-05 09:28:30
  • 404

二叉树根节点到指定节点的路径

题目描述:给定一棵二叉树和二叉树中一个节点,输出根节点到指定节点间的路径。       10          / \         5  12          / \       ...
  • shixiaoguo90
  • shixiaoguo90
  • 2014-04-15 14:54:37
  • 2917

面试题:完全二叉树699个节点,则叶子节点有多少个?

面试题:完全二叉树699个节点,则叶子节点有多少个? 怕记不住,先上结论: 假设一个二叉树有n个节点: 度为0的节点个数是n0 度为1的节点个数是n1 度为2的节...
  • u010429424
  • u010429424
  • 2017-09-05 21:31:48
  • 1507

二叉树中,找到从根节点到某一个节点的路径

源码转自 http://blog.csdn.net/hackbuteer1/article/details/6686858 1。 首先是检测某个节点时候在某个二叉树中出现过。 /* // If ...
  • miao6664659
  • miao6664659
  • 2012-11-21 16:21:21
  • 3135
收藏助手
不良信息举报
您举报文章:给定根节点,求完全二叉树的节点数量。
举报原因:
原因补充:

(最多只允许输入30个字)