222. Count Complete Tree Nodes

Posted 张乐乐章

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 possible. It can have between 1 and 2h nodes inclusive at the last level h.

 

最简单的办法是遍历 粗暴遍历会超时

直接遍历每一个节点是不现实的,所以必须通过完全二叉树的特点来计算,我们可以想到,除了最下的那一层,其余的部分,都是满二叉树,这样我们首先可以判断当前的二叉树是不是满二叉树,判断的方法是判断树最左和最右两边的长度是否相等,如果相等就可以直接计算,如果不等就进入递归,分别计算左右两颗子树,知道只有一个节点的时候就停止。
因为完全二叉树进行左右分割之后,很容易就会出现满二叉树,所以节省了大量的遍历节点的时间


 1 class Solution {
 2     public int countNodes(TreeNode root) {
 3         if(root==null) return 0;
 4         int l = count_l(root);
 5         int r = count_r(root);
 6         if(l==r) return (1<<l)-1;
 7         return 1 + countNodes(root.left) + countNodes(root.right);
 8         
 9     }
10     private int count_l(TreeNode root){
11         if(root == null) return 0;
12         int cnt = 0;
13         while(root!=null){
14             cnt+=1;
15             root =root.left;
16         }
17         return cnt;
18     }
19     private int count_r(TreeNode root){
20         if(root == null) return 0;
21         int cnt = 0;
22         while(root!=null){
23             cnt+=1;
24             root = root.right;
25         }
26         return cnt;
27     }
28 }

 

以上是关于222. Count Complete Tree Nodes的主要内容,如果未能解决你的问题,请参考以下文章

222. Count Complete Tree Nodes

222. Count Complete Tree Nodes

222.Count Complete Tree Nodes

LeetCode222——Count Complete Tree Nodes

Leetcode 222. Count Complete Tree Nodes

LeetCode OJ 222. Count Complete Tree Nodes