#include <iostream>
#include "CreatTree.h"
TreeNode * CreatTree(){
char da;
std::cout<<"输入"<<" "<<"节点的数据:";
std::cin>>da;
if (da == '#')
{
return nullptr;
}
TreeNode * T = new TreeNode;
T->data = da;
T->left = CreatTree();
T->right = CreatTree();
return T;
}
void ShowTreeNode(TreeNode *root){
if (root == nullptr)
{
return;
}
ShowTreeNode(root->left);
std::cout<<root->data<<" ";
ShowTreeNode(root->right);
}
// 完全二叉树 的 节点个数
int find_Node(TreeNode * root){
if (root == nullptr)
{return 0;}
// 如果是满二叉树,直接根据深度来计算节点个数
TreeNode * left = root->left;
TreeNode * right = root->right;
int left_depth = 0, right_depth = 0;
while (left)
{
left = left->left;
left_depth++;
}
while (right)
{
right = right->right;
right_depth++;
}
if (left_depth == right_depth)
{
return (2<<left_depth) - 1;
}
int left_num = find_Node(root->left);
int right_num = find_Node(root->right);
return left_num + right_num + 1;
}
void test(){
TreeNode * root;
root = CreatTree();
ShowTreeNode(root);
std::cout<<find_Node(root)<<std::endl;
}
int main(void){
test();
return 0;
}
09-22
518
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
06-11
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交