LeetCode222 判断是否为完全二叉树并求节点个数
给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例:
输入:
1
/ \
2 3
/ \ /
4 5 6 输出: 6
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
/*
算法思想:
递归的方法,思路是分别找出以当前节点为根节点的左子树和右子树的高度并对比,如果相等,则说明是满二叉树,直接返回节点个数,即2的h次方-1,h为该满二叉树的高度。如果不相等,则节点个数为左子树的节点个数加上右子树的节点个数再加1(根节点),其中左右子树节点个数的计算可以使用递归来计算。
*/
//算法实现: class Solution {
public:
int countNodes(TreeNode* root) {
int hLeft = 0, hRight = 0;
TreeNode *pLeft = root, *pRight = root;
while (pLeft) { //左子树高度
++hLeft;
pLeft = pLeft->left;
}
while (pRight) { //右子树高度
++hRight;
pRight = pRight->right;
}
if (hLeft == hRight) //满二叉树
return pow(2, hLeft) - 1;
return countNodes(root->left) + countNodes(root->right) + 1;
}
};
给定一个二叉树,判断是否为完全二叉树。
//给定一个二叉树,判断是否为完全二叉树。
/*
算法实现:
采用层次遍历。将所有节点加入队列,包括空结点,当遇到空结点时,判断它之后的结点是否为空,若不为空,则不是完全二叉树。
*/
//算法实现:
bool iscompTree(TreeNode *root){
if(!root)
return true;
TreeNode *p=root;
queue<TreeNode*>q;
q.push(p);
while(!q.empty()){
p=q.front();
q.pop();
if(p){ //结点非空,则左右子树入队
q.push(p->left);
q.push(p->right);
}
else{ //结点为空,若之后的结点不为空,则不是完全二叉树
while(!q.empty()){
p=q.front();
q.pop();
if(!p)
return false;
}
}
}
return true;
}
LeetCode222 判断是否为完全二叉树并求节点个数的更多相关文章
- Python3求m以内的素数、求m个数中最小的n个数
[本文出自天外归云的博客园] 题1:求m以内的素数(m>2) def find_all_primes_in(m): def prime(num): for i in range(2, num): ...
- [LeetCode] Count Complete Tree Nodes 求完全二叉树的节点个数
Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...
- [Swift]LeetCode222. 完全二叉树的节点个数 | Count Complete Tree Nodes
Given a complete binary tree, count the number of nodes. Note: Definition of a complete binary tree ...
- [LeetCode] 222. Count Complete Tree Nodes 求完全二叉树的节点个数
Given a complete binary tree, count the number of nodes. Note: Definition of a complete binary tree ...
- leetcode-222完全二叉树的节点个数
题目 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置. ...
- 222. Count Complete Tree Nodes -- 求完全二叉树节点个数
Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...
- 已知一棵完全二叉树,求其节点的个数 要求:时间复杂度低于O(N),N为这棵树的节点个数
package my_basic.class_4; public class Code_08_CBTNode { // 完全二叉树的节点个数 复杂度低于O(N) public static class ...
- LeetCode 222.完全二叉树的节点个数(C++)
给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底 ...
- LeetCode 222. 完全二叉树的节点个数(Count Complete Tree Nodes)
题目描述 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位 ...
随机推荐
- 代理ip知识
一.没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP HTTP_VIA = 没数值或不显示 HTTP_X_FORWARDED_FOR = 没数值或不显示 二.使用 ...
- 使用OpenSSL自建一个HTTPS服务
1. 理论知识 1.1 什么是https 传统的 HTTP 协议以明文方式进行通信,不提供任何方式的数据加密,很容易被中间攻击者破解通信内容或者伪装成服务器与客户端通信,在安全性上存在很大问题. HT ...
- v-text、v-html、v-pre
v-text 用于将数据填充到标签中,作用于插值表达式类似,但是相对于直接插值是没有闪动问题的 v-html 用于将HTML片段填充到标签中,但是可能有安全问题(易被跨域脚本攻击[XSS攻击]) v- ...
- 找和为K的两个元素
总时间限制:1000ms 内存限制: 65536kB 描述 在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k. 输入 第一行输入序列的长度n和k,用空格分开. 第二 ...
- 2020年“感恩杯”台州学院第十三届大学生程序设计竞赛D、H、I题解(后续补充)
D题:小z与他的袜子 描述 小z每天会穿一双新袜子. 开始他的衣柜里有n双袜子,袜子会从1-n进行编号.每天早上他都会从衣柜里拿编号最小的袜子来穿.每天晚上他会把今天穿的袜子扔进篮子里,如果篮子里有n ...
- 【对线面试官】Java注解
public void send(String userName) { try { // qps 上报 qps(params); long startTime = System.c ...
- 简单了解一下 Nginx
一.Nginx 基本认识 1.Nginx 是什么? Nginx 是一款开源的.轻量级的.高性能的 HTTP 服务器 以及 反向代理服务器. 特点是 占有内存少.并发能力强. 2.Nginx 用来干什么 ...
- 其实吧,LRU也就那么回事。
这是why哥的第 81 篇原创文章 你面试的时候遇见过LRU吗? LRU 算法,全称是Least Recently Used. 翻译过来就是最近最少使用算法. 这个算法的思想就是:如果一个数据在最近一 ...
- E-BOOK-TINY6410-LCD的使用
电子书需要通过屏幕显示出来,首先写了LCD模块.代码上传到了 github https://github.com/qq2216691777/E-book 本次完善了lcd模块的程序.可以适用在其他地方 ...
- IDEA本地运行Hadoop程序配置环境变量
1.首先到github上下载hadoop-common-2.2.0-bin-master 2.解压放到自定义目录下 再将hadoop.dll文件复制到windows/System32目录下 3.配置环 ...