A、编写二叉树的创建函数,可以是排序二叉树的创建思路(见教材),或者以先序遍历为框架;
B、编写中序遍历函数;
C、编写先序遍历函数;
D、编写后序遍历函数;
E、编写排序二叉树的插入操作函数,实现在二叉排序树插入一个新元素;
F、编写函数求二叉树的深度。
编写主函数main,依次完成:创建一颗二叉树 (调用中序遍历函数,输出遍历结果 (调用先序遍历函数,输出遍历结果 (调用后序遍历函数,输出遍历结果 (调用排序二叉树插入函数,插入一个新元素 (再次调用中序遍历函数,输出插入新元素后的遍历结果 (调用求二叉树深度的函数,输出二叉树深度。
C语言实现二叉树相关操作
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 游一游走一走 2022-11-14 16:23关注
#include <stdlib.h> #include <stdio.h> typedef struct node { //树的结点 int data; struct node *left; struct node *right; } Node; typedef struct { //树根 Node *root; } Tree; void insert(Tree *tree, int value) //创建树 { Node *node = (Node *)malloc(sizeof(Node)); //创建一个节点 node->data = value; node->left = NULL; node->right = NULL; if (tree->root == NULL) //判断树是不是空树 { tree->root = node; } else { //不是空树 Node *temp = tree->root; //从树根开始 while (temp != NULL) { if (value < temp->data) //小于就进左儿子 { if (temp->left == NULL) { temp->left = node; return; } else { //继续判断 temp = temp->left; } } else { //否则进右儿子 if (temp->right == NULL) { temp->right = node; return; } else { //继续判断 temp = temp->right; } } } } return; } //前序遍历 void preOrederTraverse(Node *node) { if (node != NULL) { printf("%d ", node->data); preOrederTraverse(node->left); preOrederTraverse(node->right); } } void inorder(Node *node) //树的中序遍历 { if (node != NULL) { inorder(node->left); printf("%d ", node->data); inorder(node->right); } } //后序遍历 void postOrderTraverse(Node *node) { if (node != NULL) { postOrderTraverse(node->left); postOrderTraverse(node->right); printf("%d ", node->data); } } int getDepth(Node *node) { int deep = 0; //深度计数 if (node != NULL) { //如果当前结点不为空 int leftdeep = getDepth(node->left); //则先判断其左子树的深度 int rightdeep = getDepth(node->right); //然后判断右子树的深度 deep = leftdeep >= rightdeep ? leftdeep + 1 : rightdeep + 1; //二叉树的深度对应左右子树中最大的一个 再加上当前的深度1 } return deep; //将深度值返回 } int main() { Tree tree; tree.root = NULL; //创建一个空树 int n; scanf("%d", &n); for (int i = 0; i < n; i++) //输入n个数并创建这个树 { int temp; scanf("%d", &temp); insert(&tree, temp); } inorder(tree.root); //中序遍历 printf("\n"); preOrederTraverse(tree.root); //前序遍历 printf("\n"); postOrderTraverse(tree.root); //后序遍历 printf("\n"); insert(&tree, 10); inorder(tree.root); //中序遍历 printf("\n"); preOrederTraverse(tree.root); //前序遍历 printf("\n"); postOrderTraverse(tree.root); //后序遍历 printf("\n"); printf("%d", getDepth(tree.root)); getchar(); getchar(); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 软件定义网络mininet和onos控制器问题
- ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
- ¥15 ArcGIS批量裁剪
- ¥15 labview程序设计
- ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
- ¥15 Cloudreve保存用户组存储空间大小时报错
- ¥15 伪标签为什么不能作为弱监督语义分割的结果?
- ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
- ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
- ¥15 android 集成sentry上报时报错。