c语言 二叉树的创建及其递归与非递归算法
以下包含有前后序的递归和非递归算法
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef struct node{
int data;
struct node* right;
struct node* left;
}Node;
typedef struct{
Node *root;
}Tree;
void insert(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(value<temp->data)
{
if(temp->left==NULL)
{
temp->left=node;
break;
}
else
temp=temp->left;
}
else
{
if(value>temp->data)
{
if(temp->right==NULL)
{
temp->right=node;
break;
}
else
temp=temp->right;
}
}
}
}
}
//递归前序遍历法
void Preorder(Node *node)
{
if(node!=NULL)
{
printf("%d\t",node->data);
Preorder(node->left);
Preorder(node->right);
}
}
//递归后序遍历法
void Postorder(Node *node)
{
if(node!=NULL)
{
Postorder(node->left);
Postorder(node->right);
printf("%d\t",node->data);
}
}
//非递归前序遍历方法
void PreorderNonrecurion(Node *node)
{
if(node!=NULL)
{
Node *stack[MAXSIZE];
int top=-1;
Node *p=NULL;
stack[++top]=node;
while(top!=-1)
{
p=stack[top--];
printf("%d\t",p->data);
if(p->right!=NULL)
stack[++top]=p->right;
if(p->left!=NULL)
stack[++top]=p->left;
}
}
}
//非递归后序遍历法
void PostorderNonrecurion(Node *node)
{
if(node!=NULL)
{
Node *stack1[MAXSIZE];int top1=-1;
Node *stack2[MAXSIZE];int top2=-1;
stack1[++top1]=node;
Node *p=NULL;
while(top1!=-1)
{
p=stack1[top1--];
stack2[++top2]=p;
if(p->left!=NULL)
stack1[++top1]=p->left;
if(p->right!=NULL)
stack1[++top1]=p->right;
}
Node *q=NULL;
while(top2!=-1)
{
q=stack2[top2--];
printf("%d\t",q->data);
}
}
}
int main(){
int arr[7]={6,3,4,2,5,1,7};
Tree tree;
tree.root=NULL;
for(int i=0;i<7;i++)
insert(&tree,arr[i]);
printf("递归前序遍历结果为\t");
Preorder(tree.root);
printf("\n\n");
printf("递归后序遍历结果为\t");
Postorder(tree.root);
printf("\n\n");
printf("非递归前序遍历结果为\t");
PreorderNonrecurion(tree.root);
printf("\n\n");
printf("非递归后序遍历结果为\t");
PostorderNonrecurion(tree.root);
} 相关推荐
steeven 2020-11-10
Tips 2020-10-14
nongfusanquan0 2020-08-18
yedaoxiaodi 2020-07-26
清溪算法君老号 2020-06-27
pengkingli 2020-06-25
yishujixiaoxiao 2020-06-25
清溪算法 2020-06-21
RememberMePlease 2020-06-17
nurvnurv 2020-06-05
SystemArchitect 2020-06-02
码墨 2020-05-29
清溪算法 2020-05-27
清溪算法 2020-05-25
bluewelkin 2020-05-19
dbhllnr 2020-05-15
steeven 2020-05-09
baike 2020-05-09