1.二叉树结构体定义
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
2.递归创建二叉树
TreeNode *CreateBinaryTree()//创建二叉树
{
TreeNode *p;
Datetype num;
cin>>num;
if(num == 0)
{
p = NULL;
}
else{
p = new TreeNode(num);
p->left = CreateBinaryTree();
p->right = CreateBinaryTree();
}
}
3.前序遍历
void preOrderTraverse(TreeNode *root)
{
if(root)
{
cout<<root->val<<" ";
preOrderTraverse(root->left);
preOrderTraverse(root->right);
}
}
4.中序遍历
void inOrderTraverse(TreeNode *root)
if(root)
{
inOrderTraverse(root->left);
cout<<root->val<<" ";
inOrderTraverse(root->right);
}
}
5.后序遍历
void lastOrderTraverse(TreeNode *root)//后序遍历
{
if(root)
{
lastOrderTraverse(root->left);
lastOrderTraverse(root->right);
cout<<root->val<<" ";
}
}
6. 二叉树最大深度
int maxDepth(TreeNode* root)
{
if(root==NULL) return 0;
int left = maxDepth(root->left);
int right = maxDepth(root->right);
return left>right?left+1:right+1;
}
7. 二叉树总节点数
int Nodenum(TreeNode* root)//二叉树总节点数
{
if(root==NULL)
return 0;
else
return Nodenum(root->left)+Nodenum(root->right)+1;
}
8.二叉树叶子节点数
int Leafnum(TreeNode* root)//二叉树叶子节点数
{
if(root==NULL)
return 0;
else if(root->left==NULL&&root->right==NULL)
return 1;
else
return Leafnum(root->left)+Leafnum(root->right);
}
9.总程序
#include<iostream>
using namespace std;
typedef int Datetype;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//定义二叉树结构体
TreeNode *CreateBinaryTree()//创建二叉树
{
TreeNode *p;
Datetype num;
cin>>num;
if(num == 0)
{
p = NULL;
}
else{
p = new TreeNode(num);
p->left = CreateBinaryTree();
p->right = CreateBinaryTree();
}
}
void preOrderTraverse(TreeNode *root)//前序遍历
{
if(root)
{
cout<<root->val<<" ";
preOrderTraverse(root->left);
preOrderTraverse(root->right);
}
}
void inOrderTraverse(TreeNode *root)//中序遍历
{
if(root)
{
inOrderTraverse(root->left);
cout<<root->val<<" ";
inOrderTraverse(root->right);
}
}
void lastOrderTraverse(TreeNode *root)//后序遍历
{
if(root)
{
lastOrderTraverse(root->left);
lastOrderTraverse(root->right);
cout<<root->val<<" ";
}
}
int maxDepth(TreeNode* root) //二叉树最大深度
{
if(root==NULL) return 0;
int left = maxDepth(root->left);
int right = maxDepth(root->right);
return left>right?left+1:right+1;
}
int Nodenum(TreeNode* root)//二叉树总节点数
{
if(root==NULL)
return 0;
else
return Nodenum(root->left)+Nodenum(root->right)+1;
}
int Leafnum(TreeNode* root)//二叉树叶子节点数
{
if(root==NULL)
return 0;
else if(root->left==NULL&&root->right==NULL)
return 1;
else
return Leafnum(root->left)+Leafnum(root->right);
}
int main()
{
TreeNode *root = NULL;
root = CreateBinaryTree();
cout<<"Binary tree created successfully!"<<endl;
cout<<"前序遍历结果:"<<endl;
preOrderTraverse(root);
cout<<endl<<"中序遍历结果:"<<endl;
inOrderTraverse(root);
cout<<endl<<"后序遍历结果:"<<endl;
lastOrderTraverse(root);
cout<<endl<<"二叉树最大深度为:"<<maxDepth(root)<<endl;
cout<<"二叉树叶子节点数为:"<<Leafnum(root)<<endl;
cout<<"二叉树总节点数为:"<<Nodenum(root)<<endl;
}
10.测试
测试用例如下图:
扫描二维码关注公众号,回复:
5749882 查看本文章
则输入 1 2 4 8 0 0 9 0 0 5 10 0 0 0 3 6 0 0 7 0 0
输出结果: