[LeetCode]222. Count Complete Tree Nodes

/**
 * 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) {
		return count(root,-1,-1);
    }
    
    public int count(TreeNode root,int leftNum,int rightNum){
		if(root==null){
			return 0;
		}
		int leftFloor=leftNum,rightFloor=rightNum;
		if(leftFloor==-1){
		    leftFloor=1;
		    TreeNode h=root;
			while(h.left!=null){
				leftFloor++;
				h=h.left;
			}
		}
		if(rightFloor==-1){
		    rightFloor=1;
		    TreeNode h=root;
	        while(h.right!=null){
	        	rightFloor++;
	        	h=h.right;
	        }
		}
		if(leftFloor==rightFloor){
        	return (int)Math.pow(2, rightFloor)-1;
        }else{
        	return count(root.left,leftFloor-1,-1)+count(root.right,-1,rightFloor-1)+1;
        }
	}
}

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传到下一个节点,节省时间

但这个算法并没有AC,只通过了16/18的样例







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值