【LeetCode】222. Count Complete Tree Nodes-完全二叉树的结点个数

一、描述:

二、思路:

完全二叉树

对于整棵二叉树,从根结点出发,一直沿左下方向遍历树的深度是l,一直沿右下方向遍历的深度是r;则有两种情况:

  1、l == r,左右深度相等,一定是完全二叉树,即满二叉树,结点个数为(2^l-1)或(2^r-1);

  2、l != r,只有一种情况:在二叉树的倒数第二层,某个父结点只有左叶子结点而无右叶子结点,及l=r+1。等价的说,将这一个多余的左叶子结点去掉的话,则每棵最小的二叉树(一共3个结点)都是满二叉树,即又回到了上述情况1,最后再加1即为总叶子结点;

因为二叉树本身就是递归定义的,故可采用递归实现。

三、代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int countNodes(TreeNode root) {
        if(root==null){
            return 0;
        }   

        int l = getLeft(root);
        int r = getRight(root);  

        if(l==r) {
            return (2<<(l-1)) - 1;  //2<<2相当于2*2^2=8
        } else {
            return countNodes(root.left) + countNodes(root.right) + 1;
        }
    }  

    private int getLeft(TreeNode root) {
        int count = 0;
        while(root!=null) {
            count+=1;
            root = root.left;
        }
        return count;
    }  

    private int getRight(TreeNode root) {
        int count = 0;
        while(root!=null) {
            count+=1;
            root = root.right;
        }
        return count;
    }
}  

一点疑问:提交代码时只是改了下变量名,比如r/l/count等,改完之后再提交就会显示“Time Limit Exceeded”,我没搞懂到底是哪有问题?

时间: 2024-08-07 10:07:33

【LeetCode】222. Count Complete Tree Nodes-完全二叉树的结点个数的相关文章

[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

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

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

[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

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

(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

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