标签:
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 2hnodes
inclusive at the last level h.
也就是这个要求要比O(n)还要低,所以自然就想起来binary search了,而二叉树本身就非常适合binary search。so 肯定用二分。
而到底怎么做呢?我们可以根据数的高度来跟左右子树比,这样就可以判处不完整的树到底在那一部分。看代码,非递归版的
public int countNodes(TreeNode root) { int cnt = 0; int height = height(root); while (root != null) { if (height(root.right) == height-1) { cnt += 1 << height-1; root = root.right; } else { cnt += 1 << height-2; root = root.left; } height--; } return cnt; } private int height(TreeNode root) { int cnt = 0; while (root != null) { cnt++; root = root.left; } return cnt; }
int height(TreeNode root) { return root == null ? -1 : 1 + height(root.left); } public int countNodes(TreeNode root) { int h = height(root); return h < 0 ? 0 : height(root.right) == h-1 ? (1 << h) + countNodes(root.right) : (1 << h-1) + countNodes(root.left); }
版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode-Count Complete Tree Nodes
标签:
原文地址:http://blog.csdn.net/my_jobs/article/details/48104161