#include<iostream>
#include<cstdio>
#include<malloc.h>
using namespace std;
//树节点
typedef struct node
{
int data;
struct node*left;
struct node*right;
}Node;
//树根
typedef struct
{
Node*root;
}Tree;
void insert_tree(Tree* tree,int value)
{
//申请空间并且初始化元素
Node *node=(Node*)malloc(sizeof(Node));
node->data=value;
node->left=NULL;
node->right=NULL;
//插入节点
if(tree->root==NULL)
{
//此时是空的树,该节点充电根节点
tree->root=node;
}
else
{
Node*temp=tree->root;
while(temp!=NULL)
{
//左小右大
if(temp->data>value)
{
//进入左边之后看指针是否有
if(temp->left==NULL)
{
temp->left=node;
return;//如果此时是空的,直接赋给它
}
else
{
//如果不为空,继续继续向下搜索
temp=temp->left;
}
}
//如果是temp->data<value 右子树 其余情况与左子树相同
else
{
if(temp->right==NULL)
{
temp->right=node;
return;
}
else
{
//继续向下搜索
temp=temp->right;
}
}
}
}
return;
}
//利用中序遍历打印树
void inorder(Node *node)
{
if(node!=NULL)
{
//递归打印
//左中右
inorder(node->left);
cout<<node->data<<" ";
inorder(node->right);
}
}
//利用先序遍历打印树
//根左右
void preorder(Node*node)
{
if(node!=NULL)
{
cout<<node->data<<" ";//根
preorder(node->left);
preorder(node->right);
}
}
//利用后序遍历打印树
//左右根
void postorder(Node*node)
{
if(node!=NULL)
{
postorder(node->left);
postorder(node->right);
cout<<node->data<<" ";
}
}
int main()
{
Tree tree;
tree.root=NULL;//创建一个空树
cout<<"请输入树中结点的个数:";
int n;
cin>>n;
while(n--)
{
int temp;
cout<<"请输入结点的值:";
cin>>temp;
insert_tree(&tree,temp);
}
cout<<"二叉树中序遍历的结果为:";
inorder(tree.root);
cout<<endl;
cout<<"二叉树先序遍历的结果为:";
preorder(tree.root);
cout<<endl;
cout<<"二叉树后序遍历的结果为:";
postorder(tree.root);
cout<<endl;
return 0;
}
树的创建与遍历
于 2024-08-07 21:39:30 首次发布