本文主要是介绍寒假作业:2024/2/7,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作业1:编程实现二叉树的操作
1.1二叉树的创建
函数代码:
/** function: 创建新节点* @param [ in] * @param [out] * @return 节点*/
Btree create_Node()
{Btree s=(Btree)malloc(sizeof(struct Node));if(NULL==s)return NULL;s->data='\0';s->lchild=s->rchild=NULL;return s;
}
/** function: 创建二叉树* @param [ in] * @param [out] * @return 二叉树*/
Btree create_tree()
{//输入数据域的值datatype element;printf("please enter element:");scanf(" %c",&element);//用'#'表示空的孩子节点if('#'==element)return NULL;//创建新节点Btree tree=create_Node();tree->data=element;//递归创建节点的左孩子tree->lchild=create_tree();//递归创建节点的右孩子tree->rchild=create_tree();return tree;
}
1.2二叉树的先序遍历
函数代码:
/** function: 二叉树的前序遍历* @param [ in] * @param [out] 二叉树* @return 无*/
void front(Btree tree)
{if(NULL==tree)return;//按照根左右的顺序开始遍历printf("%c",tree->data);//左子树front(tree->lchild);//右子树front(tree->rchild);
}
1.3二叉树的中序遍历
函数代码:
/** function: 二叉树的中序遍历* @param [ in] * @param [out] 二叉树* @return 无*/
void middle(Btree tree)
{if(NULL==tree)return;//按照左根右的顺序开始遍历//左子树middle(tree->lchild);//根printf("%c",tree->data);//右子树middle(tree->rchild);
}
1.4二叉树的后序遍历
函数代码:
/** function: 二叉树的后序遍历* @param [ in] * @param [out] 二叉树* @return 无*/
void back(Btree tree)
{if(NULL==tree)return;//按照左右根的顺序开始遍历//左子树back(tree->lchild);//右子树back(tree->rchild);//根printf("%c",tree->data);
}
1.5二叉树各个节点度的个数
函数代码:
/** function: 计算各个度节点个数* @param [ in] * @param [out] 二叉树,度节点* @return 无*/
void Count(Btree tree,int *n0,int *n1,int *n2)
{if(NULL==tree)return;if(NULL==tree->lchild && NULL==tree->rchild){++*n0;}else if(NULL!=tree->lchild && NULL!=tree->rchild){++*n2;}else{++*n1;}//左子树Count(tree->lchild,n0,n1,n2);//右子树Count(tree->rchild,n0,n1,n2);
}
1.6二叉树的深度
函数代码:
/** function: 计算二叉树深度* @param [ in] * @param [out] 二叉树* @return 深度*/
int Deep(Btree tree)
{if(NULL==tree)return 0;//计算左子树深度int left_deep=1+Deep(tree->lchild);//计算右子树深度int right_deep=1+Deep(tree->rchild);//返回较大的深度return left_deep>right_deep?left_deep:right_deep;}
效果图:
总代码:
head.h:
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//树节点结构体的创建
typedef char datatype;
typedef struct Node
{//数据域datatype data;//左子树指针域struct Node *lchild;//右子树指针域struct Node *rchild;
}*Btree;
//函数声明
Btree create_Node();
Btree create_tree();
void front(Btree tree);
void middle(Btree tree);
void back(Btree tree);
void Count(Btree tree,int *n0,int *n1,int *n2);
int Deep(Btree tree);#endif
main.c:
#include "head.h"int main(int argc, const char *argv[])
{//定义一个二叉树Btree tree=create_tree();//二叉树的前序遍历front(tree);puts("");//二叉树的中序遍历middle(tree);puts("");//二叉树的后序遍历back(tree);puts("");//二叉树各个度节点个数int n0=0,n1=0,n2=0;Count(tree,&n0,&n1,&n2);printf("n0=%d n1=%d n2=%d n=%d\n",n0,n1,n2,n0+n1+n2);//二叉树深度int deep=Deep(tree);printf("deep=%d\n",deep);return 0;
}
test.c:
#include "head.h"
/** function: 创建新节点* @param [ in] * @param [out] * @return 节点*/
Btree create_Node()
{Btree s=(Btree)malloc(sizeof(struct Node));if(NULL==s)return NULL;s->data='\0';s->lchild=s->rchild=NULL;return s;
}
/** function: 创建二叉树* @param [ in] * @param [out] * @return 二叉树*/
Btree create_tree()
{//输入数据域的值datatype element;printf("please enter element:");scanf(" %c",&element);//用'#'表示空的孩子节点if('#'==element)return NULL;//创建新节点Btree tree=create_Node();tree->data=element;//递归创建节点的左孩子tree->lchild=create_tree();//递归创建节点的右孩子tree->rchild=create_tree();return tree;
}
/** function: 二叉树的前序遍历* @param [ in] * @param [out] 二叉树* @return 无*/
void front(Btree tree)
{if(NULL==tree)return;//按照根左右的顺序开始遍历printf("%c",tree->data);//左子树front(tree->lchild);//右子树front(tree->rchild);
}
/** function: 二叉树的中序遍历* @param [ in] * @param [out] 二叉树* @return 无*/
void middle(Btree tree)
{if(NULL==tree)return;//按照左根右的顺序开始遍历//左子树middle(tree->lchild);//根printf("%c",tree->data);//右子树middle(tree->rchild);
}
/** function: 二叉树的后序遍历* @param [ in] * @param [out] 二叉树* @return 无*/
void back(Btree tree)
{if(NULL==tree)return;//按照左右根的顺序开始遍历//左子树back(tree->lchild);//右子树back(tree->rchild);//根printf("%c",tree->data);
}
/** function: 计算各个度节点个数* @param [ in] * @param [out] 二叉树,度节点* @return 无*/
void Count(Btree tree,int *n0,int *n1,int *n2)
{if(NULL==tree)return;if(NULL==tree->lchild && NULL==tree->rchild){++*n0;}else if(NULL!=tree->lchild && NULL!=tree->rchild){++*n2;}else{++*n1;}//左子树Count(tree->lchild,n0,n1,n2);//右子树Count(tree->rchild,n0,n1,n2);
}
/** function: 计算二叉树深度* @param [ in] * @param [out] 二叉树* @return 深度*/
int Deep(Btree tree)
{if(NULL==tree)return 0;//计算左子树深度int left_deep=1+Deep(tree->lchild);//计算右子树深度int right_deep=1+Deep(tree->rchild);//返回较大的深度return left_deep>right_deep?left_deep:right_deep;}
这篇关于寒假作业:2024/2/7的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!