题目描述
分析
学过图论的我们知道,一棵层数为h的完整二叉树的最大节点数为2^h-1(节点的层数:从根开始定义起,根为第1层,根的子节点为第2层…)。那么问题来了,若结点范围是在2^(h-1)和2^h之间,怎么算呢?一种很直接的方法便是等于左子树的结点数+右子树的节点数+1。至此,我们就大概知道代码怎么写了。如果刚好是满二叉树,那么节点数便是2^h-1;如果不是,那么就左子树、右子树的结点数分别加起来算,而左右子树结点的计算和刚刚的思想是一样的,所以递归就派上用场了。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int countNodes(struct T