/*
*二叉树基本操作 范例
*/
//需要的头文件
#include <stdio.h>
#include <stdlib.h>
//节点的结构类型
typedef struct BiNode{
int data;
struct BiNode * Lchild;//左孩子
struct BiNode * Rchild;//右孩子
}BiNode,*BiTree;
/*创建一个空的二叉树
*创建成功返回节点指针,否则返回空
*/
int init(BiTree &T){
if(T=(BiNode *)malloc(sizeof(BiNode))){
T->Lchild=NULL;
T->Rchild=NULL;
return 1;
}else{
return 0;
}
}
/*
*销毁二叉树
*/
void Destory(BiTree &T){
if(T){
Destory(T->Lchild);
Destory(T->Rchild);
free(T);
T=NULL;
}
}
/*删除某节点左子树,已知二叉树及节点pt*/
void DeleteL(BiTree &T,BiTree pt){
if(pt==NULL||pt->Lchild==NULL)
return;
Destory(pt->Lchild);
pt->Lchild=NULL;
}
/*删除某节点右子树,已知二叉树及节点pt*/
void DeleteR(BiTree &T,BiTree pt){
if(pt==NULL||pt->Lchild==NULL)
return;
Destory(pt->Rchild);
pt->Lchild=NULL;
}
void InsertL(BiTree &T,int e,BiTree pt){
BiTree p;
//该节点存在的情况下
if(pt){
if(p=(BiNode *)malloc(sizeof(BiNode))){
p->data=e;
p->Lchild=pt->Lchild;
p->Rchild=pt->Rchild;
pt->Lchild=p;//最后把将pt的左孩子变成p
}
}
}
void InsertR(BiTree &T,int e,BiTree pt){
BiTree p;
//该节点存在的情况下
if(pt){
if(p=(BiNode *)malloc(sizeof(BiNode))){
p->data=e;
p->Lchild=pt->Lchild;
p->Rchild=pt->Rchild;
pt->Rchild=p;//最后把将pt的右孩子变成p
}
}
}
/*
*二叉树遍历
*先序,中序,后序
*/
//先序
void Preorder(BiTree T){
if(T){
printf("%d",T->data);
Preorder(T->Lchild);
Preorder(T->Rchild);
}
}
//中序
void Inorder(BiTree T){
if(T){
Inorder(T->Lchild);
printf("%d",T->data);
Inorder(T->Rchild);
}
}
//后序
void Postorder(BiTree T){
if(T){
Postorder(T->Lchild);
Postorder(T->Rchild);
printf("%d",T->data);
}
}
相关文章
- Kotlin:数组的基本操作
- 推荐一个Dapper扩展CRUD基本操作的开源库
- 黑马程序员--Java基础学习之IO流之字节流、字符流、读取写入文件、Copy文件、键盘输入输出、流操作的基本规律
- Java 流(Stream)简介:1、基本的输入流和输出流
- 第4章第1节练习题1 二叉树的基本操作(递归实现)
- 数据结构与算法MOOC / 第三章 栈与队列 练习题 2:栈的基本操作
- 第4章第1节练习题2 二叉树的基本操作(非递归实现)
- 第4章第1节练习题1 二叉树的基本操作(递归实现)
- WinForm 对Web Api 增 册 改 查 的基本操作
- 算法刷题-无重复字符的最长子串(哈希表、字符串)、数字 1 的个数(递归、数学)、对称二叉树(树、深度优先搜索)