标签:
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.
计算完全二叉树中节点的个数。
使用普通的遍历的方法就可以计算出节点的个数,但是这没有使用到完全二叉树的性质,事实也证明在leetcode中使用这种方式会导致超时。
百度百科中完全二叉树的定义如下:
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
根据完全二叉树的这个性质,可以这样来求解完全二叉树中节点的个数。
/** * 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 countNodes(TreeNode* root) { int res=0; helper(root,res); return res; } void helper(TreeNode * root,int &num) { if(root==NULL) return ; helper(root->left,num); num++; helper(root->right,num); } */ int countNodes(TreeNode* root) { if(root==NULL) return 0; int leftDepth=0; int rightDepth=0; for(TreeNode* node=root;node!=NULL;node=node->left) leftDepth++; for(TreeNode* node=root;node!=NULL;node=node->right) rightDepth++; if(leftDepth==rightDepth) return (1<<leftDepth)-1; else return countNodes(root->left)+countNodes(root->right)+1; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode222:Count Complete Tree Nodes
标签:
原文地址:http://blog.csdn.net/u012501459/article/details/47130673