您的位置:首页 > Web前端 > Node.js

Count Complete Tree Nodes

2015-06-07 11:50 591 查看
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. Get the height of the tree : because it is a complete tree, we can get the height of it from it's leftmost branch. If the tree just has one node, the height is 0, if root==null, the height is -1.
2. Get the height of the right subtree, if the height of the right subtree just one less than that of
the whole tree,  then the last node on the last row should be at the right subtree, the number of nodes on the left subtree plus the root should be 2^h and recursively get the number of nodes on the right subtree. If the height of the right subtree is not
one less than that of the whole tree, than the last node on the last row should be at the left subtree, the number of nodes on the right subtree plus the root should be 2^(h-1)  and recursively get the number of the nodes on the left subtree.

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
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);
}

private int height(TreeNode root) {
return root == null ? -1: height(root.left) + 1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: