include <iostream>
using namespace std;
struct TreeNode{
int value;
TreeNode *left;//左子树
TreeNode *right;//右
TreeNode(int x) :value(x),left(nullptr),right(nullptr){};
};
void Insort(int value,TreeNode *root)
{
if(value==root->value)//重复的数字不插入
return;
if(value<root->value)//重复的数字往左插
{
if (!root->left)//发现为空
root->left = new TreeNode(value);//插入新点
else
Insort(value, root->left);//递归查找
}
else//方法与左边类似
{
if(!root->right)
root->right=new TreeNode(value);
else
Insort(value,root->right);
}
}
void Preorder(TreeNode *root)//前序遍历
{
if(!root)
return;
cout<<root->value<<" ";
Preorder(root->left);
Preorder(root->right);
}
void Midorder(TreeNode *root)//中序遍历
{
if(!root)
return;
Midorder(root->left);
cout<<root->value<<" ";
Midorder(root->right);
}
void Postorder(TreeNode *root)//后序遍历
{
if(!root)
return;
Postorder(root->right);
Postorder(root->left);
cout<<root->value<<" ";
}
int main() {
int n,x,value;
cin>>n;
cin>>value;
TreeNode root(value);
for(int i=1;i<n;i++)
{
cin>>x;
Insort(x,&root);
}
Preorder(&root);
cout<<endl;
Midorder(&root);
cout<<endl;
Postorder(&root);
cout<<endl;
return 0;
}
c++实现二叉树的插入和三种遍历算法
最新推荐文章于 2023-04-20 01:13:27 发布