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) + countNodes(root->right);
    }

  用这段代码提交,果真还是超时了。那么如何改进呢?

  那就是利用满二叉树来简化算法。满二叉树的节点数计算公式为N = 2^h - 1. h为二叉树的层数。递归过程如下:

  

  1. 判断以当前节点为根节点的数是否为满二叉树,若是计算节点个数并返,回否则继续往下执行。
  2. 对当前节点的左子树和右子树分别判断,并加一,表示该节点计数。
/**
 * 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 nodesofMan(TreeNode* root){ //判断是否为满二叉树,若是返回该满二叉树的节点数。
        int l=1,r=1;
        TreeNode *node = root;
        while(node->left)
        {
            l++;
            node = node->left;
        }
        node = root;
        while(node->right)
        {
            r++;
            node = node->right;
        }

        if(l == r)
            return (int)pow(2,(double)l) - 1;
        else
            return 0;
    }
    int countNodes(TreeNode* root) {
        if(root == NULL) return 0;
        //else if(root->left == NULL) return 1;

        if(nodesofMan(root)) return nodesofMan(root);
        else
            return countNodes(root->left) + countNodes(root->right) +1;
    }
};
时间: 2024-10-19 08:20:38

leetcode 222 Count Complete Tree Nodes (计算完全二叉树节点数)的相关文章

8.8 LeetCode 222 Count Complete Tree Nodes

Question: Count Complete Tree Nodes Total Accepted: 11040 Total Submissions: 53992My Submissions Question Solution Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from Wikipedia:In a complete binary tree

Java for LeetCode 222 Count Complete Tree Nodes

Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from Wikipedia: In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as po

[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 Java

题目: Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from Wikipedia:In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as

(medium)LeetCode 222.Count Complete Tree Nodes

Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from Wikipedia:In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as pos

LeetCode 222. Count Complete Tree Nodes

complete binary tree:除最后一行外每一行的节点都有两个儿子,最后一行的节点尽可能靠左. ver0: 1 class Solution { 2 public: 3 int countNodes(TreeNode* root) { 4 if(!root) return 0; 5 return 1 + countNodes(root->left) + countNodes(root->right); 6 } 7 }; 不出意料地TLE. ver1: 1 class Solutio

【LeetCode】222. Count Complete Tree Nodes

Count Complete Tree Nodes Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from Wikipedia:In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last le

[LeetCode][JavaScript]Count Complete Tree Nodes

Count Complete Tree Nodes Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from Wikipedia:In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last le

LeetCode OJ 222. Count Complete Tree Nodes

Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from Wikipedia:In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as pos