码迷,mamicode.com
首页 > 其他好文 > 详细

222. Count Complete Tree Nodes

时间:2018-02-05 23:26:42      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:node   nod   节点   特点   ble   init   text   计算   长度   

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

标签:node   nod   节点   特点   ble   init   text   计算   长度   

原文地址:https://www.cnblogs.com/zle1992/p/8419461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!