#include <iostream>
struct TreeNode
{
char data;
TreeNode* left;
TreeNode* right;
};
// 创建二叉树 输入‘#’号将孩子节点设置为NULL
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 Tree_height(TreeNode *root){
// 求树的最大高度
if (root == nullptr)
{
return 0;
}
else
return 1 + std::max(Tree_height(root->left), Tree_height(root->right));
}
int MIN_Tree_height(TreeNode *root){
// 求树的最小深度:从根节点开始到第一个叶子结点的高度 后序遍历 左右中 即:求出左子树的最小深度, 然后求出右子树的最小深度 返回给中间节点
if (root == nullptr)
{
return 0;
}else if (root->left == nullptr && root->right != nullptr)
{
return 1 + MIN_Tree_height(root->right);
}else if (root->left != nullptr && root->right == nullptr)
{
return 1 + MIN_Tree_height(root->left);
}else
return 1 + std::min(MIN_Tree_height(root->left), MIN_Tree_height(root->right));
}
// 判断是否为平衡二叉树
bool isbalance(TreeNode *root){ // 后序遍历
if (root == nullptr)
{
return true;
}
int left_height = Tree_height(root->left);
int right_hight = Tree_height(root->right);
if (std::abs(left_height - right_hight) <= 1)
{
return true;
}
return false;
bool left_balance = isbalance(root->left);
bool right_balance = isbalance(root->right);
return left_balance && right_balance;
}
// 测试
void test(){
TreeNode *root = CreatTree();
int a = Tree_height(root);
int b = MIN_Tree_height(root);
std::cout<<a<<" "<<b<<std::endl;
bool is_balance = isbalance(root);
std::cout<<"------"<<is_balance<<"------"<<std::endl;
}
int main(void){
test();
return 0;
}
C++ 代码实现 求二叉树的最大高度、最小深度、判断二叉树是否平衡
最新推荐文章于 2024-08-18 17:00:01 发布