数据结构 | 二叉树的创建和三种遍历方式

二叉树的创建和三种遍历方式

帮同学写作业顺带复习了一下

直接丢代码了:

#include <stdio.h>
#include <stdlib.h>


// 二叉树节点结构体&指针类型
typedef struct BiTNode 
{
	char data;    // 数据域
	struct BiTNode* lchild;  // 左孩子
	struct BiTNode* rchild; // 右孩子
}BiTNode, *BiTree;


void CreateBiTree(BiTree &T){
	// 前序遍历创建二叉树
	char data;
	scanf("%c", &data);
	if (data != '#'){           // 遇到#表示当前树结束
		T = new BiTNode;          // 生成根节点
		T->data = data;             // 给数据域赋值
		CreateBiTree(T->lchild);         // 递归创建左子树
		CreateBiTree(T->rchild);          // 递归创建右子树

	}else{
		T = NULL;       // 空树
	}
}


// 前序遍历
void PreOrderTraverse(BiTree T){
	if(T){
		printf("%c ", T->data);             // 访问根节点
		PreOrderTraverse(T->lchild);      // 递归前序遍历左子树
		PreOrderTraverse(T->rchild);      // 递归前序遍历右子树
	}
}

// 中序遍历
void InOrderTraverse(BiTree T){
	if(T){
		InOrderTraverse(T->lchild);      // 递归中序遍历左子树
		printf("%c ", T->data);             // 访问根节点
		InOrderTraverse(T->rchild);      // 递归中序遍历右子树
	}
}

// 后序遍历
void PostOrderTraverse(BiTree T){
	if(T){
		PostOrderTraverse(T->lchild);      // 递归后序遍历左子树
		PostOrderTraverse(T->rchild);      // 递归后序遍历右子树
		printf("%c ", T->data);             // 访问根节点
	}
}



int main(){
	BiTree bt = NULL;
	CreateBiTree(bt);

	printf("\n前序遍历:");
	PreOrderTraverse(bt);

	printf("\n中序遍历:");
	InOrderTraverse(bt);

	printf("\n后序遍历:");
	PostOrderTraverse(bt);



	return 0;
}

over.

posted @ 2021-10-14 20:43  Mz1  阅读(424)  评论(0编辑  收藏  举报