首页 > 其他分享 >leetcode222-完全二叉树的节点个数

leetcode222-完全二叉树的节点个数

时间:2022-11-02 15:14:35浏览次数:73  
标签:right TreeNode leetcode222 int nullptr 二叉树 root 节点 left

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

这道题如果要最快,就要充分利用完全二叉树的性质。甚至还有二分查找法,还没怎么认真看

利用树的深度判断是否为完全二叉树。若是,直接公式得出节点数。

class Solution {
public:
    int countNodes(TreeNode* root) {
        if(root==nullptr) return 0;
        TreeNode* left=root->left;
        TreeNode* right=root->right;
        int leftDepth=0,rightDepth=0;
        while(left)
        {
            left=left->left;leftDepth++;
        }
        while(right)
        {
            right=right->right;rightDepth++;
        }
        if(leftDepth==rightDepth) return (2<<leftDepth)-1;
        else return countNodes(root->left)+countNodes(root->right)+1;
    }
};

递归法

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int countNodes(TreeNode* root) {
        if(root==nullptr) return 0;
        if(root->left==nullptr&&root->right==nullptr) return 1;
        return countNodes(root->left)+countNodes(root->right)+1;
    }
};

迭代法,我写的这个比递归法慢很多

class Solution {
public:
    int countNodes(TreeNode* root) {
        if(root==nullptr) return 0;
        queue<TreeNode*> qqq;
        qqq.push(root);
        int res=0;
        while(!qqq.empty())
        {
            int size=qqq.size();
            for(int i=0;i<size;i++)
            {
                TreeNode *t=qqq.front();
                qqq.pop();
                res++;
                if(t->left) qqq.push(t->left);
                if(t->right) qqq.push(t->right);
            }
        }
        return res;
    }
};

 

标签:right,TreeNode,leetcode222,int,nullptr,二叉树,root,节点,left
From: https://www.cnblogs.com/uacs2024/p/16851050.html

相关文章

  • 代码随想录训练营第二十二天 | 二叉树
    今天是第22天,依旧还是二叉树235.二叉树的最近公共祖先classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){......
  • K8S节点配置资源驱逐
    当节点内存到达多少时。对节点的pod进行驱逐[root@lecode-test-001~]#cat/var/lib/kubelet/kubeadm-flags.envKUBELET_KUBEADM_ARGS="--network-plugin=cni--pod-inf......
  • BM-27-之字形打印二叉树
    用两个栈来模拟队列,利用了一个栈倒叙一个栈正序的特点,注意压栈顺序也有改变就是感觉写出来代码有些重复vector<vector<int>>Print(TreeNode*pRoot){ vector<vector<......
  • 记一次node节点无法加入K8S集群
    #问题现象:root@small-virtual-machine:~#kubeadmjoin10.0.0.133:6443--tokend2hyl5.5qt5fzjsdbxm2k5o   --discovery-token-ca-cert-hashsha256:d02674df33b......
  • Javascript进阶笔记 - DOM模型与节点
    DOM模型与节点目录DOM模型与节点1.DOM模型2.节点2.1节点的常用方法1.DOM模型DOM(文档对象模型)就是把文档中的标签,属性,文本转换成对象来管理(类似于Java中的对象)do......
  • 数据结构 线索二叉树及其代码实现
    7.6、线索二叉树由于二叉树结构中各种遍历(中序、前序、后序、层次)不知道结点的前驱和后继,可以利用那些没有孩子的结点的指针指向它的前驱和后继;没有前驱或者后继就指向NUL......
  • 数据结构 平衡二叉树及其代码实现
    7.9、平衡二叉树(BalancedBinaryTree)简称平衡树(AVL树)——树上任一结点的左子树和右子树的高度只差不会超过1结点的平衡因子=左子树高度-右子树高度得到:平衡二叉......
  • 数据结构【完整代码】之(C语言实现【二叉树】创建、递归遍历(前序、中序、后序)、非递归
    本文包含两个文件的代码和一张测试效果图:BinaryTree.h文件:用于存储信息:存放函数、结构体、栈的函数实现、变量名等TreeTravel.cpp文件:用于测试效果图:(位于最上方)效果图:Bin......
  • 力扣 124. 二叉树中的最大路径和 [1.0,2.0]
    124.二叉树中的最大路径和路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 ......
  • 二叉树
      平衡二叉树,高度差,不能超过1,如果有差别,只能差1.要维持平衡二叉树。 二叉树进化二叉查找树进化平衡二叉树 注意,如果一样,就不存。......