题目:Given a complete binary tree, count the number of nodes.
解题思路:完全树的定义就不用我说了吧,本人想了很多种方法都超时。。。。借鉴一下LeetCode大神的方法:https://leetcode.com/problems/count-complete-tree-nodes/discuss/61958/Concise-Java-solutions-O(log(n)2)
先贴一下代码,等有时间再回来写思路:
代码:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public int countNodes(TreeNode root) {
if(root == null) return 0;
int h = height(root);
if(height(root.left ) == height(root.right))
return (h-1>0?1<<h-1:1) + countNodes(root.right);
else
return (h-2>0?1<<h-2:1) + countNodes(root.left);
}
public int height(TreeNode root){
return root == null?0:1+height(root.left);
}