这题是利用完全二叉树的性质计算节点数目。那么是通过比较左右子树的最左结点的高度来看那边是满的,然后递归计算。
//使用getLeftChildNode(TreeNode)获得左儿子结点 //使用getRightChildNode(TreeNode)获得右儿子结点 //使用isNullNode(TreeNode)判断结点是否为空 int get_left_height(TreeNode root) { if (isNullNode(root)) { return 0; } else { return get_left_height(getLeftChildNode(root)) + 1; } } int count_complete_binary_tree_nodes(TreeNode root) { if (isNullNode(root)) return 0; TreeNode leftNode = getLeftChildNode(root); TreeNode rightNode = getRightChildNode(root); int lheight = get_left_height(leftNode); int rheight = get_left_height(rightNode); if (lheight == rheight) { return (1 << lheight) + count_complete_binary_tree_nodes(rightNode); } else { return (1 << rheight) + count_complete_binary_tree_nodes(leftNode); } }