#include "stdlib.h"
#include "stdio.h"
typedef int KeyType;
typedef struct Node
{
KeyType key;
struct Node* left;
struct Node* right;
struct Node* parent;
}Node,*pNode;
void insert(pNode* root,KeyType key)
{
//初始化插入结点
pNode p =(pNode)malloc(sizeof(Node));
p->key =key;
p->left =p->right =p->parent =NULL;
if((*root)==NULL){
*root =p;
return;
}
//插入到当前结点(*root)的左孩子
if ((*root)->left ==NULL&&(*root)->key>key)
{
p->parent =(*root);
(*root)->left =p;
return;
}
if ((*root)->right ==NULL&&(*root)->key<key)
{
p->parent =(*root);
(*root)->right =p;
return;
}
if ((*root)->key>key)
{
insert(&(*root)->left,key);
}
else if((*root)->key<key)
insert(&(*root)->right,key);
else
return;
}
void create(pNode* root,KeyType *keyArray,int length)
{
int i;
//逐个结点插入二叉树
for (i=0;i<length;i++)
{
insert(root,keyArray[i]);
}
}
//中序遍历
void inorderTraver(pNode root)
{
if (root ==NULL)
{
return;
}
inorderTraver(root->left);
printf("%d ",root->key);
inorderTraver(root->right);
}
//前序遍历
void preorderTraver(pNode root)
{
if (root ==NULL)
{
return;
}
printf("%d ",root->key);
preorderTraver(root->left);
preorderTraver(root->right);
}
//后序遍历
void postorderTraver(pNode root)
{
if (root ==NULL)
{
return;
}
postorderTraver(root->left);
postorderTraver(root->right);
printf("%d "root->key);
}
int main()
{
int i;
//注意这种传参数的方式,以root地址作为参数,返回根节点的指针
pNode root =NULL;
KeyType nodeArray[11] ={15,6,18,3,7,17,20,2,4,13,9};
create(&root,nodeArray,11);
//inorderTraver(root);
preorderTraver(root);
printf("\n");
}
二叉排序树的创建,以及前序、中序、后序遍历的递归实现
最新推荐文章于 2022-10-13 14:59:04 发布