这是数据结构的第8篇文章
存储结构
typedef int myType;
typedef struct treeNode
{
myType element; //值域元素
struct treeNode *lchild; //左孩子
struct treeNode *rchild; //右孩子
}Btree;
创建二叉树
void createTree(Btree **T) //传入一个Btree的指针的地址
{
myType data;
scanf("%d", &data);
if(data == -1) { //-1代表终端节点值
*T = NULL;
} else {
*T = (Btree *)malloc(sizeof(struct treeNode));
(*T)->element = data;
printf("请输入%d的左孩子节点:", data);
createTree(&((*T)->lchild));
printf("请输入%d的右孩子节点:", data);
createTree(&((*T)->rchild));
}
}
先序遍历
void preOrder(Btree *T)
{
if(T != NULL) {
printf("%d ", T->element); //访问根节点
preOrder(T->lchild); //先根序遍历左子树
preOrder(T->rchild); //先根序遍历右子树
}
}
中序遍历
void inOrder(Btree *T)
{
if(T != NULL) {
inOrder(T->lchild); //中根序遍历左子树
printf("%d ", T->element); //访问根节点
inOrder(T->rchild); //中根序遍历右子树
}
}
后序遍历
void postOrder(Btree *T)
{
if(T != NULL) {
postOrder(T->lchild); //后根序遍历左子树
postOrder(T->rchild); //后根序遍历右子树
printf("%d ", T->element); //访问根节点
}
}
销毁二叉树
void distroyTree(Btree **T)
{
Btree *pl, *pr;
if((*T) == NULL) {
return ;
} else {
pl = (*T)->lchild; //保存左孩子的地址
pr = (*T)->rchild; //保存右孩子的地址
(*T)->lchild = NULL;
(*T)->rchild = NULL;
free(*T); //释放根节点
(*T) = NULL;
distroyTree(&pl); //递归销毁
distroyTree(&pr);
}
}
二叉树的深度
int tree_deep(Btree *T)
{
int deep = 0;
if(T) {
int leftdeep = tree_deep(T->lchild);
int rightdeep = tree_deep(T->rchild);
deep = leftdeep > rightdeep ? leftdeep+1 : rightdeep+1;
}
return deep;
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有