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 2hnodes inclusive at the last level h.
方法1:递归
从root开始,一直向左的深度 == 一直向右的深度,则说明root是一个满二叉树,节点个数为2^height - 1
若不是,则节点个数为 countNodes(root->left) + countNodes(root->right) + 1;
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 int countNodes(TreeNode* root) { 13 if (root == NULL) { 14 return 0; 15 } 16 int left_height = get_height(root, true); //从root开始 17 int right_height = get_height(root, false); 18 if (left_height == right_height) { 19 return pow(2, left_height) - 1; 20 } 21 return countNodes(root->left) + countNodes(root->right) + 1; 22 } 23 private: 24 int get_height(TreeNode *root, bool toLeft) { 25 if (root == NULL) { 26 return 0; 27 } 28 if (toLeft) { 29 return get_height(root->left, true) + 1; 30 } 31 return get_height(root->right, false) + 1; 32 33 } 34 };