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的主要内容,如果未能解决你的问题,请参考以下文章