c语言建立一颗二叉树实训项目,c语言二叉树的建立

#include

#include

#define CHAR 1 /*字符型1 整型 0 */

#if CHAR

typedef char TElemType;

TElemType Nil=' ';/*字符型以空格符为空*/

#define form "%c" /*输入输出格式为%d*/

#else

typedef int TElemType;

TElemType Nil=0; /*整型以0为空*/

#define form "%d" /*输入输出格式为%d*/

#endif

typedef struct node /*结构类型定义*/

{

TElemType data;

struct node *left;

struct node *right;

}BiTNode,*BiTree;

BiTNode *initBiTree(BiTNode *bt)

{

bt=NULL;

return bt;

}

BiTNode *CreateBiTree(BiTNode *bt)

{/*按先序次序输入二叉树中结点的值(可为字符型或整型)*/

TElemType ch;

scanf(form,&ch);

if(ch==Nil)

bt=NULL;

else

{

bt=(BiTNode*)malloc(sizeof(BiTNode));/*生成根结点*/

if(!bt) exit(0);

bt->data=ch;

bt->left=CreateBiTree(bt->left);/*构造左子树*/

bt->right=CreateBiTree(bt->right);/*构造右子树*/

}

return bt;

}

void PrintTree(BiTNode *bt,int i)

{/*输出二叉树*/

if(bt!=NULL)

{

PrintTree(bt->right,i+5);/*递归调用右子树*/

#if CHAR

if(bt->data!=Nil)

{

printf("%*c\n",i,bt->data);/*i不输出,用来调节输出*/

}

#else

if(bt->data!=Nil)

{

printf("%*d\n",i,bt->data);

}

#endif

PrintTree(bt->left,i+5);

i=i-5;

}

}

int main()

{

int i;

BiTree bt;

bt=initBiTree(bt);

#if CHAR

printf("请先序输入二叉树(如:ab三个空格 a为根节点,b为左子树的二叉树)\n");

#else

printf("请先序输入二叉树(如:1 2 0 0 0 1为根节点,2为左子树的二叉树)\n");

#endif

bt=CreateBiTree(bt);

printf("输入建立的二叉树!!!\n");

PrintTree(bt,5);

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我知道您的要求,下面是回答您的问题: 要用C语言建立一个二叉树,我们可以定义一个结构体来表示节点,包含该节点的、左子树和右子树指针: ``` typedef struct TreeNode { int value; struct TreeNode *left; struct TreeNode *right; } TreeNode; ``` 然后我们可以定义一个函数来创建二叉树输入一个整型数组和数组长度,返回二叉树的根节点指针: ``` TreeNode* createTree(int arr[], int len) { if (len <= 0) { return NULL; } TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode)); node->value = arr[0]; node->left = createTree(arr+1, len/2); node->right = createTree(arr+(len/2)+1, len-(len/2)-1); return node; } ``` 这里我们采用递归的方式,每次创建一个节点,将其设为数组的第一个元素,然后将左子树设为数组前一半(如果长度为偶数,则取左边的一半),右子树设为数组后一半(如果长度为偶数,则取右边的一半)。 接下来我们可以定义一个函数来遍历二叉树。这里我们采用先序遍历,即先访问根节点,再遍历左子树,最后遍历右子树: ``` void preOrder(TreeNode *node) { if (!node) { return; } printf("%d ", node->value); preOrder(node->left); preOrder(node->right); } ``` 类似地,我们可以定义中序遍历和后序遍历函数。 最后,要计算二叉树的高度,可以采用递归方式计算左子树和右子树的高度,然后取较大再加1,即为整个二叉树的高度: ``` int treeHeight(TreeNode *node) { if (!node) { return 0; } int leftHeight = treeHeight(node->left); int rightHeight = treeHeight(node->right); return leftHeight > rightHeight ? leftHeight+1 : rightHeight+1; } ``` 这样,我们就用C语言建立了一个二叉树并遍历并计算了二叉树高度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值