实现二叉树的建树

实现二叉树的建树

题目

用二叉链表来储存二叉树,,实现二叉树党的建树(通过键盘输入)、先序遍历、中序遍历、后序遍历、销毁5个操作。编制 主程序main()这些函数,并输出各遍历结果。

代码

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

typedef struct BiNode {
	char data;
	struct BiNode *lchild,*rlchild;
} BiNode,*BiTree;

void CreateTree(BiTree &T);
void PreOrder(BiTree T);
void InOrder(BiTree T);
void PostOrder(BiTree T);
void Destory(BiTree T);

int main() {
	BiTree T;
	printf("请先以先序遍历方式输入二叉树\n");
	CreateTree(T);
	printf("先序遍历序列");
	PreOrder(T);
	printf("\n中序遍历序列");
	InOrder(T);
	printf("\n后序遍历序列");
	PostOrder(T);
	return 0;
}

void CreateTree(BiTree &T) {
	char ch;
	scanf("%c",&ch);
	if(ch == '#')//很关键,记得输入来终止递归 
		T = NULL;
	else {
		if(!(T= (BiNode*) malloc(sizeof(BiNode))))
			return;
		T->data = ch;
		CreateTree(T->lchild);
		CreateTree(T->rlchild);
	}
}
void Visted(char ch) {
	printf("%c",ch);
}
void PreOrder(BiTree T) {
	if(T) {
		Visted(T->data);
		PreOrder(T->lchild);
		PreOrder(T->rlchild);
	}
}

void InOrder(BiTree T) {
	if(T) {
		InOrder(T->lchild);
		Visted(T->data);
		InOrder(T->rlchild);
	}
}

void PostOrder(BiTree T) {
	if(T) {
		PostOrder(T->lchild);
		PostOrder(T->rlchild);
		Visted(T->data);
	}
}
void Destory(BiTree T) {
	if(T) {
		Destory(T->lchild);
		Destory(T->rlchild);
		free(T);
	}
}

结果
在这里插入图片描述

感悟

!!! 我们在输入树的内部数据时,需要使用特殊符号先将树补充为完全二叉树,即所有节点都必须有两个子节点,单个节点也需要补

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值