zoukankan      html  css  js  c++  java
  • 20.11.24 leetcode222

    题目链接:https://leetcode-cn.com/problems/count-complete-tree-nodes/

    题意:利用完全二叉树的性质,求完全二叉树的结点数。

    分析:如果是单纯的二叉树,直接用dfs或者bfs。针对本题,首先我们得知道完全二叉树的性质是:除了最下面一层,中间每层结点数是满的,且最下面一层的结点都位于最左边。在求得层数后,除了最下面一层的所有层的结点数可以很轻松的求到,我们的任务主要是求最下面一层有多少结点。这里可以采用二分法来快速求得最下面一层,而在判断某个结点是否存在的时候,可以利用位运算,具体来说,对于某个结点,我们用二进制来表示的话,从根结点1开始,从根节点往左,就是添0,往右就是添1,以5为例,其二进制是101,而它就是从根节点左结点的右结点,所有可以利用二进制来快速的判断是否存在某个结点。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int countNodes(TreeNode* root) {
            if(root==nullptr)return 0;
            int level=0;
            TreeNode* node=root;
            while(node->left!=nullptr){
                level++;
                node=node->left;
            }
            if(level==0)return 1;
            int ans=1;
            int low=1<<level,high=(1<<(level+1))-1;
            while(low<=high){
                int mid=(high+low)/2;
                if(exist(mid,level,root)){
                    ans=mid;
                    low=mid+1;
                }
                else{
                    high=mid-1;
                }
            }
            return ans;
        }
    
        bool exist(int k,int level,TreeNode* root){
            int bit=1<<(level-1);
            TreeNode* node=root;
            while(node!=nullptr&&bit>0){
                if(!(bit&k)){
                    node=node->left;
                }
                else node=node->right;
                bit>>=1;
            }
            return node!=nullptr;
        }
    };
  • 相关阅读:
    创建网关项目(Spring Cloud Gateway)
    调用Consul服务(消费服务)
    创建调用Consul的客户端项目
    注册服务到服务中心(Consul)
    安装Consul服务中心
    创建Spring Boot微服务项目
    React学习之State
    React学习及实例开发(一)——开始
    React Native学习(十)—— 生命周期
    【小记事】电脑命令行开WiFi
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/14032347.html
Copyright © 2011-2022 走看看