二叉树是一种特殊的树型结构,一般都以二叉树作为树型结构学习的案例讲解。
二叉树的主要操作有遍历,例如有先序遍历、中序遍历、后序遍历。在遍历之前,就是创建一棵二叉树,当然,还需要有删除二叉树的算法。
以二叉树的创建、删除、先序遍历为例,实现代码如下
#include
#include
typedef char ElemType;
typedef struct node
{ ElemType data;
struct node *lchild, *rchild;
} BTNode;
BTNode * createTree(BTNode *tree){
ElemType e;
fflush(stdin);
scanf("%c", &e);
if(e != '#'){
tree = (BTNode *)malloc(sizeof(BTNode));
tree->data = e; tree->lchild = NULL; tree->rchild = NULL;
tree->lchild = createTree(tree->lchild);
tree->rchild = createTree(tree->rchild);
}
return tree;
}
void DestroyBTree(BTNode *b)
{ if (b==NULL) return ;
else
{ DestroyBTree(b->lchild);
DestroyBTree(b->rchild);
free(b);
}
}
void PreOrder(BTNode *b)
{ if (b!=NULL)
{ printf("%c ",b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
int main(){
BTNode *tree = createTree(tree);
PreOrder(tree);
DestroyBTree(tree);
return 0;
}
测试用例如下
A
B
D
#
G
#
#
#
C
E
#
#
F
#
#
A B D G C E F
以上测试用的测试案例,就是上述二叉树图形的结构,二叉树构成过程中,以先序的方式创建,子树为空的时候,输入为#
上述算法中,还可以做更多的优化,每一个优化都是一次进步。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
二叉树
+关注
关注
0文章
74浏览量
12240
发布评论请先 登录
相关推荐
二叉树删除算法
二叉树的删除操作主要是寻找替代点来进行替换操作。方法:先右转,再一直左转,直到左连接为空的那个点。然后,摘取出来,完成链接指向操作。public void deletmin(void){ root
发表于 12-30 20:55
2016大疆笔试题与总结(编程类)
总体来说,大疆的题目不算太难。尤其是编程题,思路很清晰,不涉及到太复杂的算法。只有第三题可能涉及到递归操作(软肋)。其中第二题有关完全二叉树的操作,只需要知道完全二叉树的四个重要性质就对了,借助数学
发表于 11-21 15:28
用C语言构建一个二叉树失败
; ,tree.leftnode->data);这三个输出都是乱码,我不知道二叉树的建立过程中问题在哪里,我应该在每个节点都分配了内存,不过结果好像有问题}
发表于 03-24 03:47
什么是“红黑树”看了就知道
今天我们要说的红黑树就是就是一棵非严格均衡的二叉树,均衡二叉树又是在二叉搜索树的基础上增加了自动维持平衡的性质,插入、搜索、删除的效率都比较
发表于 10-27 17:00
Java编程求二叉树的镜像两种方法介绍
给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像。仔细分析这两棵树的特点,看看能不能总结出求镜像的步骤。这两棵树的根节点相
发表于 12-16 16:25
二叉树的前序遍历非递归实现
我们之前说了二叉树基础及二叉的几种遍历方式及练习题,今天我们来看一下二叉树的前序遍历非递归实现。 前序遍历的顺序是, 对于树中的某节点,先遍历该节点,然后再遍历其左子树,最后遍历其右子
评论