题目链接:https://leetcode.com/problems/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 2h nodes inclusive at the last level h.
思路:求完全二叉树的结点个数。可以求左右子树的高度,
1.如果相等则说明左子树是满二叉树,那么可以根据左子树的高度求出左子树加上根节点的结点数为2^leftHeight,再加上右子树的结点即为以当前结点为根的结点总数
2.否则说明右子树为满二叉树,同样右子树的结点加上根节点的结点数为2^rightHeight,再加上左子树结点即为当前结点为根的结点总数
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int depth(TreeNode* root)
{
if(!root) return 0;
return depth(root->left)+1;
}
int countNodes(TreeNode* root) {
int ans = 0;
while(root)
{
int left = depth(root->left), right=depth(root->right);
if(left!=right) ans += pow(2, right), root = root->left;
else ans += pow(2, left), root= root->right;
}
return ans;
}
};