C语言实现二叉树的二叉链表存储表示

//二叉树的二叉链表存储表示//杨鑫#include <stdio.h>#include <stdlib.h>#define max(a, b) a > b ? a : b//自定义max()函数typedef char TELemType;//定义结二叉树的构体typedef struct BTree{TELemType data;struct BTree *lChild;struct BTree *rChild;}BinTree;//二叉树的创建BinTree* CreateTree(BinTree *T){char temp;scanf("%c", &temp);if(temp == '0')return 0;T = (BinTree *)malloc(sizeof(BinTree));T->data = temp;T->lChild = CreateTree(T->lChild);//递归创建左子树T->rChild = CreateTree(T->rChild);//递归创建右子树return T;}//计算叶子结点的数量int sumleft(BinTree *T){int sum = 0, leftNum, rightNum;if(T){if((!T->lChild) && (!T->rChild)){sum++;}leftNum = sumleft(T->lChild);sum += leftNum;rightNum = sumleft(T->lChild);sum += rightNum;}return sum;}//先序遍历二叉树void PreOrderTraverse(BinTree *T){if(T){printf("%c", T->data);PreOrderTraverse(T->lChild);PreOrderTraverse(T->rChild);}}//中序遍历二叉树void InOrderTraverse(BinTree *T){if(T){InOrderTraverse(T->lChild);printf("%c", T->data);InOrderTraverse(T->rChild);}}//后序遍历二叉树void PostOrderTraverse(BinTree *T){ if(T){PostOrderTraverse(T->lChild);PostOrderTraverse(T->rChild );printf("%c",T->data ); }}//统计树的深度int getDepth(BinTree *T){int dep = 0, depleft, depright;if(!T)dep = 0;else{depleft = getDepth(T->lChild);depright = getDepth(T->rChild);dep = 1 + max(depleft, depright);}return dep;}int main(){BinTree *Tree;Tree = CreateTree(Tree);printf("=========分隔符============\n\n");printf("二叉树的先序遍历:\n");PreOrderTraverse(Tree);printf("\n");printf("二叉树的中序遍历:\n");InOrderTraverse(Tree);printf("\n");printf("二叉树的后序遍历:\n");PostOrderTraverse(Tree);printf("\n");printf("\n=========================\n");printf("叶子结点数为: %d\n", sumleft(Tree));printf("二叉树的深度为:%d\n", getDepth(Tree));return 0;}

如图:

,只有坚韧不拔向着目标奋进,成功后将在不远处等待着你的到来。

C语言实现二叉树的二叉链表存储表示

相关文章:

你感兴趣的文章:

标签云: