失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C语言手写二叉树(链式存储结构)

C语言手写二叉树(链式存储结构)

时间:2023-04-03 23:36:46

相关推荐

C语言手写二叉树(链式存储结构)

C语言手写二叉树(链式存储结构)

二叉树结构二叉树基本运算代码图例(main函数执行过程如下:)阶段I阶段II阶段III阶段IV阶段V先序遍历输出过程

二叉树结构

二叉树可以用顺序存储或链式存储两种结构,顺序存储需要借助一维数组,然后通过内存之间位置找到相应元素,访问速度和内存将会大大提升。顺序存储结构只适用于完全二叉树,一般二叉树不宜用顺序表示。下面将着重讲解二叉树的链式存储结构。

链式存储结构提供了二叉树在计算机内的一种表示方法,称为二叉链表。

// An highlighted block//节点结构体typedef struct btnode{char element;struct btnode *lChild;struct btnode *rChild;}BTNode;//二叉树结构体typedef struct binarytree{BTNode *root;}BinaryTree;

二叉树基本运算

void Create(BinaryTree *bt);构造一棵空二叉树btBTNode *NewNode(char x, BTNode *ln, BTNode *rn);创建一个新节点bool Root(BinaryTree *bt, char *x);判断二叉树是否为空,非空通过指针x返回根节点的值void MakeTree(BinaryTree *bt, char e, BinaryTree *left, BinaryTree *right);构造二叉树,根节点的值为e,left和right为左右子树

代码

// An highlighted block#include<iostream>using namespace std;typedef struct btnode{char element;struct btnode *lChild;struct btnode *rChild;}BTNode;typedef struct binarytree{BTNode *root;}BinaryTree;//构造一棵空二叉树void Create(BinaryTree *bt) {bt->root = NULL;}//创建一个新节点BTNode *NewNode(char x, BTNode *ln, BTNode *rn) {BTNode *p = (BTNode *) malloc (sizeof(BTNode));p->element = x;p->lChild = ln;p->rChild = rn;return p;}//判断二叉树是否为空,非空通过指针x返回根节点的值bool Root(BinaryTree *bt, char *x) {if(bt->root) {x = &bt->root->element;return true;} else {return false;}}//构造二叉树,根节点的值为e,left和right为左右子树void MakeTree(BinaryTree *bt, char e, BinaryTree *left, BinaryTree *right) {if(bt->root || left == right) {return ;}bt->root = NewNode(e, left->root, right->root);left->root = NULL;right->root = NULL;}//void PreOrder(BTNode *t) {if(!t) return;printf("\t%c\t\n", t->element);PreOrder(t->lChild);PreOrder(t->rChild);}//先序遍历二叉树void PreOrderTree(BinaryTree *bt) {PreOrder(bt->root);}void Clear(BTNode *t) {if(!t) return;Clear(t->lChild);Clear(t->rChild);free(t);}void TreeClear(BinaryTree *bt) {Clear(bt->root);}int main() {BinaryTree a, b, x, y, z;//阶段I//构造5个空节点 Create(&a);Create(&b);Create(&x);Create(&y);Create(&z);//将节点连接为二叉树,注意节点a和b始终为空节点MakeTree(&y, 'E', &a, &b);//阶段IIMakeTree(&z, 'F', &a, &b);MakeTree(&x, 'C', &y, &z);//阶段IIIMakeTree(&y, 'D', &a, &b);//阶段IVMakeTree(&z, 'B', &y, &x);//阶段Vprintf("PreOrderTree: \n");PreOrderTree(&z);//先序遍历打印二叉树TreeClear(&z);system("pause");return 0;}

图例(main函数执行过程如下:)

阶段I

阶段II

阶段III

阶段IV

阶段V

先序遍历输出过程

如果觉得《C语言手写二叉树(链式存储结构)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。