3.24 统计完全二叉树的节点数

题目】:

  给定一棵完全二叉树的头节点head,返回这棵树的节点个数

要求】:

  如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法

题目来源:左程云老师《程序员代码面试指南》

原文地址:https://www.cnblogs.com/latup/p/10205083.html

时间: 2024-10-16 21:25:30

3.24 统计完全二叉树的节点数的相关文章

计算完全二叉树所有节点数

今天在leetcode,遇见一个题目,计算一个完全二叉树所有的节点数.这里分享一下心得. 首先,需要完全掌握什么是完全二叉树? 我觉得对于完全二叉树的概念中,有一点需要注意.完全二叉树:除最后一层外,每一层上的节点数均达到最大值:在最后一层上只缺少右边的若干结点.最后一层的结点一定是向左靠.其主要思想是,想以某一个结点为“根结点”,然后,然后判断其是否是满二叉树,因为满二叉树是计算很简单2k - 1(k=1,2,3```),即对于满二叉树只需要计算出其深度即可,也就是利用满二叉树简化对完全二叉树

算法学习——Count Complete Tree Nodes (计算完全二叉树的节点数)

完全二叉树——若设二叉树的深度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树. 解题思路: 满二叉树有一个性质是节点数等于2^h-1(h为高度),所以可以这样判断节点的左右高度是不是一样,如果是一样说明是满二叉树,就可以用公式2^h-1(h为高度),如果左右不相等就递归计算左右节点. 具体代码如下: /** * Definition for a binary tree node. * public class Tr

[leetcode]222. Count Complete Tree Nodes完全二叉树的节点数

/* 满二叉树的特点是2^n-1,对于完全二叉树,一个node如果左右子树深度相同,那么 是一个满二叉树.如果不是,那就把node算上,继续往下看,下边的可能是满二叉树 由于完全二叉树中有一些子满二叉树,所以可以省时间 */ public int countNodes(TreeNode root) { if (root==null) return 0; int l = getLeft(root); int r = getRight(root); return (l == r)?(1<<l)-1

leetcode 222 Count Complete Tree Nodes (计算完全二叉树节点数)

1. 问题描述 计算完全二叉树的节点数.对于完全二叉树的定义可参考wikipedia上面的内容. 2. 方法与思路 最简单也最容易想到的方法就是使用递归,分别递归计算左右子树的节点数的和.但此方法最容易超时,一般不可取. int countNodes(TreeNode* root) { if(root == NULL) return 0; else if(root->left == NULL) return 1; return countNodes(root->left) + countNod

[程序员代码面试指南]二叉树问题-计算完全二叉树节点数

题意 计算完全二叉树节点数. 题解 不使用遍历方法,优化时间复杂度到O(H^2). 高度为h的满二叉树节点数为2^h-1. 设计递归函数search(Node root,int h,int H),返回当前节点roo为根的完全二叉树的节点数.h代表该节点在的高度,高度从1计算,H代表原始二叉树的高度始终不变. t判断当前节点的右子树的最左边的节点的高度. -若和该树的高度一致,则说明左子树为满二叉树,节点数=由上式得到的左子树节点数+本节点数1+递归得到的右子树节点数. 若高度不一致,则说明右子树

单链表的节点数,合并,相交,反转

1.求节点数 function getNodeNum(head){ if(head == null){ return 0; } var len = 0, cur = head; while(cur != null){ len++; cur = cur.next; } return len; } 2. 查找倒数第K个节点 //可以统计节点个数,再找到第n-(k-1)个节点,最后一个节点的倒数第1个,倒数第K个节点是n-(k-1) //这里使用双指针法,两个指针,第一个指针先走到第k个节点,前后两个

poj 1947 Rebuilding Roads 【树形DP】 【求至少删去树中 多少条边 使得树中节点数为P】

Rebuilding Roads Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10066   Accepted: 4595 Description The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1..N) after the terrible earthquake last May. Th

二叉树(5)----求二叉树节点数,递归与非递归

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.求二叉树节点数 对任意一个给定子树的节点数,左子树节点数+右子树节

Java实现二叉搜索树的添加,前序、后序、中序及层序遍历,求树的节点数,求树的最大值、最小值,查找等操作

什么也不说了,直接上代码. 首先是节点类,大家都懂得 /** * 二叉树的节点类 * * @author HeYufan * * @param <T> */ class Node<T extends Comparable<? super T>> { /** * 节点储存的值 */ private T data; /** * 左子节点 */ private Node<T> leftNode; /** * 右子节点 */ private Node<T>