c 语言将二叉树转化为链表,C语言描述二叉树的实现及操作(链表实现)

//二叉树的实现(C语言)//链表,递归实现//编译环境:visual studio 2017//操作系统:win8.1

#include#include#includetypedefchar Elementtype; //定义数据类型,可根据需要自行定制

typedef struct TreeNode * Node; //Node相当于struct treeNode *//定义数节点结构

typedef structTreeNode {

Elementtype Element;

Node left;//树节点的左子节点

Node right; //树节点的右子节点

}TREE,*PTREE;//函数声明

void CreatTree(PTREE *); //树的先序创建函数

void PreOrderTree(PTREE ); //树的前序遍历函数

void InOrderTree(PTREE ); //树的中序遍历

void PostOrderTree(PTREE ); //树的后序遍历

void LeafOfTree(PTREE ); //打印树的叶子节点函数

int Get_Leaf_Num(PTREE ); //获取树叶子节点个数

int Get_Height(PTREE ); //获取树的高度//主函数

intmain() {

PTREE Root;

printf("请先序输入二叉树的节点数据:");

CreatTree(&Root);

printf("前序遍历结果为:");

PreOrderTree(Root);

printf("中序遍历结果为:");

InOrderTree(Root);

printf("后序遍历结果为:");

PostOrderTree(Root);

printf("打印叶子节点为:");

LeafOfTree(Root);

printf("叶子节点个数为:%d", Get_Leaf_Num(Root));

printf("二叉树的高度为:%d", Get_Height(Root));

printf("");return 0;

}//定义树先序创建函数

void CreatTree(PTREE *Root) {char val=0; //用于下面存放数据

val=getchar(); //输入数据值//如果输入'*',则指向为空

if (val == '*')

(*Root) =NULL;//如果输入非'*',则给数据域赋值

else{

(*Root) = (PTREE)malloc(sizeof(TREE)); //申请内存空间

if ((*Root) ==NULL) {

printf("创建节点失败,无法分配可用内存...");

exit(-1);

}else{

(*Root)->Element = val; //给节点数据域赋值

CreatTree(&(*Root)->left);

CreatTree(&(*Root)->right);

}

}

}//树的前序遍历函数定义

voidPreOrderTree(PTREE Root) {if (Root ==NULL)return;else{

putchar(Root->Element);

PreOrderTree(Root->left);

PreOrderTree(Root->right);

}

}//树的中序遍历函数定义

voidInOrderTree(PTREE Root) {if (Root ==NULL)return;else{

InOrderTree(Root->left);

putchar(Root->Element);

InOrderTree(Root->right);

}

}//树的后序遍历函数定义

voidPostOrderTree(PTREE Root) {if (Root==NULL)return;else{

PostOrderTree(Root->left);

PostOrderTree(Root->right);

putchar( Root->Element);

}

}//打印树的叶子节点函数定义

voidLeafOfTree(PTREE Tree) {if (Tree ==NULL)return;else{if (Tree->left == NULL&&Tree->right ==NULL)

putchar(Tree->Element);else{

LeafOfTree(Tree->left);

LeafOfTree(Tree->right);

}

}

}//获取树的叶子节点个数函数定义

intGet_Leaf_Num(PTREE Tree) {if (Tree ==NULL)return 0;if (Tree->left == NULL&&Tree->right ==NULL)return 1;//递归整个树的叶子节点个数 = 左子树叶子节点的个数 + 右子树叶子节点的个数

return Get_Leaf_Num(Tree->left) + Get_Leaf_Num(Tree->right);

}//获取树高的函数定义

intGet_Height(PTREE Tree) {int Height = 0;if (Tree ==NULL)return 0;//树的高度 = max(左子树的高度,右子树的高度) + 1

else{int L_Height = Get_Height(Tree->left);int R_Height = Get_Height(Tree->right);

Height= L_Height >= R_Height ? L_Height + 1 : R_Height + 1;

}returnHeight;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值