数据结构之二叉树的构建、遍历

先序遍历:
规则:若二叉树为空,则空操作返回,否则先访问根节点,然后先序遍历左树,在先序遍历右树
先序遍历
中序遍历
规则:若树为空,则空操作返回,否则从根节点开始(注意并不是先访问根节点),中序遍历根节点的左子树,然后是访问根节点,最后中序遍历右子树
中序遍历
后序遍历
规则:若树为空,则空返回操作,否则从左到右先叶子后节点的方式遍历访问左右子树,最后是访问根节点
后序遍历
层序遍历
规则:若树为空,则空操作返回,否则从树的第一层,也就是根节点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序节点逐个访问
层序遍历
注意:本文未实现层序遍历
层序遍历:https://blog.csdn.net/qq_29542611/article/details/79372678

代码如下

/*
**二叉树 
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
	char data;
	struct node *Rchild;
	struct node *Lchild;
}*TreeNode,adNode;

//建立二叉树 
void CreateTree(TreeNode &bt){
	char da;
	scanf("%c",&da);
	getchar();
	if(da=='#'){
		bt=NULL;
	}else{
		bt=(adNode *)malloc(sizeof(node));
		bt->data=da;
		printf("输入%c的左子树的值: ",bt->data);
		CreateTree(bt->Lchild);
		printf("输入%c的右子树的值: ",bt->data);
		CreateTree(bt->Rchild);
	}	
}

//先序遍历
void Preorder(TreeNode root){
	if(root){
		printf("%c ",root->data);
		Preorder(root->Lchild);
		Preorder(root->Rchild);
	}
} 

//中序遍历
void InOrder(TreeNode root){
	if(root){
		InOrder(root->Lchild);
		printf("%c ",root->data);
		InOrder(root->Rchild);
	}
} 

//后序遍历
void PostOrder(TreeNode root){
	if(root){
		PostOrder(root->Lchild);
		PostOrder(root->Rchild);
		printf("%c ",root->data);
	}
} 

int main(){
	TreeNode tn;
	CreateTree(tn);
	printf("先序遍历: ");
	Preorder(tn);
	printf("\n中序遍历: ");
	InOrder(tn);
	printf("\n后序遍历: ");
	PostOrder(tn);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/weixin_43871956/article/details/89788903
今日推荐