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

LeetCode-Count Complete Tree Nodes

2016-08-22 12:40 323 查看
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.

Solution:

/**
* 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) {
if (root == null) return 0;
return countNodesRecur(root);
}

public int getLeftHeight(TreeNode cur){
int h = 1;
while (cur.left!=null){
cur = cur.left;
h++;
}
return h;
}

public int countNodesRecur(TreeNode root){
int h = getLeftHeight(root);
if (h==1) return 1;

if (root.right==null) return 2;
int rh = getLeftHeight(root.right);

if (rh==h-1){
// root.left is a complete tree with height h-1
return (1 << rh) -1 + 1 + countNodesRecur(root.right);
} else {
// root.right is a complete tree with height h-2
return (1 << rh) - 1 + 1 + countNodesRecur(root.left);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: