完全二叉树的节点个数

给定根节点,求这个完全二叉树的节点个数

[leetcode222]https://leetcode.com/problems/count-complete-tree-nodes/

思路

完全二叉树只有最后一层的节点会不满,上边层都是满的,而且最下面一层又是从左往右分布的。

算法步骤&原理

首先看求解树高度h,然后看根节点右子树的高度hr,如果h-hr==1,证明原数的左子树是满的,那么左子树的节点就可以得到,而右子树同理递归。否则,证明左子树是满的,同理搞定。
复杂度O(log(n)^2)

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int countNodes(TreeNode root) {
        int h=height(root);
        int nums=0;
        while(root!=null){
            if(h-1==height(root.right)){
                nums+=1<<h;
                root=root.right;
            }
            else{
                nums+=1<<h-1;
                root=root.left;
            }
            h--;
        }
        return nums;
    }
    public int height(TreeNode root){
        return root==null?-1:height(root.left)+1;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,935评论 1 31
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 11,708评论 5 14
  • 去年二叉树算法的事情闹的沸沸扬扬,起因是Homebrew 的作者 @Max Howell 在 twitter 上发...
    Masazumi柒阅读 5,507评论 0 8
  • 本文转自 http://www.cnblogs.com/manji/p/4903990.html二叉树-****你...
    doublej_yjj阅读 3,904评论 0 8
  • 不要羡慕别人有多优秀,首先分析别人有多努力。 放不下的不是爱或情义,而是你心中无谓的欲望。 成功从来没有秘诀,只有...
    MrYichen阅读 1,170评论 0 0