完全二叉树节点数

来源:互联网 发布:js微信短网址生成api 编辑:程序博客网 时间:2024/05/13 09:19


给定一棵完全二叉树的头节点head,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。


#include <iostream>using namespace std;class TreeNode{public:int val;TreeNode* left;TreeNode* right;TreeNode(int val) :val(val), left(NULL), right(NULL){}};class Solution{public:TreeNode* InitTree(TreeNode* &root){char ch = NULL;cin >> ch;if ('#' == ch){root = NULL;}else{root = new TreeNode(atoi(&ch));InitTree(root->left);InitTree(root->right);}return root;}int GetAllTreeNode(TreeNode* root){int allHeight = 0, rightHeight = 0;int nodeCount = 0;while (NULL != root){allHeight = getHight(root);rightHeight = getHight(root->right);root = allHeight == rightHeight + 1 ? root->right : root->left;nodeCount += (1 << rightHeight);}return nodeCount;}//计算完全二叉树的深度int getHight(TreeNode* root){TreeNode* p = root;int count = 0;while (NULL != p){count++;p = p->left;}return count;}};int main(){TreeNode* root = NULL;Solution s;root = s.InitTree(root);s.GetAllTreeNode(root);return 0;}


0 0
原创粉丝点击