二叉搜索树的创建,和前序遍历,中序遍历,后续遍历(非递归)。

前序遍历的规则:

(1)访问根节点

(2)前序遍历左子树

(3)前序遍历右子树

中序遍历的规则:

(1)中序遍历左子树

(2)访问根节点

(3)中序遍历右子树

后序遍历二叉树的规则:

(1)后序遍历左子树

(2)后序遍历右子树

(3)访问根节点

代码如下:

#include<stdio.h>
#include<stdlib.h>
#define N 10

typedef struct node{
int data;
struct node* left;
struct node* right;
} BTnode;

BTnode* creatbtree(int a[],int n)
{
	BTnode *p,*pa,*c,*root;
	//创建根节点
	root=(BTnode*)malloc(sizeof(BTnode));
	root->data=a[0];
	root->left=root->right=NULL;
	for(int i=1;i<n;i++){
		p=(BTnode*)malloc(sizeof(BTnode));
		p->data=a[i];
		p->left=p->right=NULL;
		c=root;
		while(c){
		pa=c;
		if(c->data>p->data)
		c=c->left;
		else
		c=c->right;
	}
		if(pa->data>p->data)
	    pa->left=p;
	    else
    	pa->right=p;
	}
   	return root;
}


//非递归前序遍历二叉树 
void PreOrder(BTnode* root){
	BTnode**s,*pa;
	int top=-1;
	s=(BTnode**)malloc((N+1)*sizeof(BTnode*));
	//先将根节点入栈 
	s[++top]=root;
	while(top!=-1){
		pa=s[top--];   //栈顶出栈 
		printf("%5d",pa->data);
		if(pa->right){         //由于栈是先进后出,所以让右节点先入栈方可使右节点最后出栈输出 
			s[++top]=pa->right;
		}
		if(pa->left){       //右节点入栈之后,再对左节点进行入栈 
			s[++top]=pa->left;
		}
	}
	free(s);
} 



//非递归中序遍历二叉树
void InOrder(BTnode* root){
	BTnode**s,*pa,*p;
	int top=-1;
	s=(BTnode**)malloc((N+1)*sizeof(BTnode*));
	pa=root;
	while(pa||top!=-1){
		while(pa){
			s[++top]=pa;
			pa=pa->left;
		}
		p=s[top--];
		printf("%5d",p->data);
		pa=p->right;
	}
} 



//非递归后序遍历二叉树
void PostOrder(BTnode* root){
	BTnode**s,*pa,*p,*last=NULL;
	int top=-1;
	s=(BTnode**)malloc((N+1)*sizeof(BTnode*));
	pa=root;
	while(pa||top!=-1){
		while(pa){
			s[++top]=pa;
			pa=pa->left;
		}
		p=s[top];
		if(p->right==NULL||p->right==last){
			last=s[top--];
			printf("%5d",last->data);
		}else{
			pa=p->right;
		}
	}
} 



int main (void)
{
	int a[N]={3,2,5,8,4,7,6,9,0,1};
	BTnode *root;
	root=creatbtree(a,N);
	//非递归前序遍历 二叉树 
	printf("该二叉搜索树前序遍历为:");
	PreOrder(root);
	printf("\n"); 
	
	//递归中序遍历二叉树
	printf("该二叉搜索树中序遍历为:");
	InOrder(root);
	printf("\n"); 
	
	//递归后序遍历二叉树
	printf("该二叉搜索树后序遍历为:");
	PostOrder(root);
}

运行结果:

猜你喜欢

转载自blog.csdn.net/qq_39241239/article/details/82261476