二叉树的二叉链表表示与实现
来源:互联网 发布:focusky mac 破解版 编辑:程序博客网 时间:2024/05/17 00:27
二叉树的特点是每个结点至多只有两棵子树,且二叉树有左右字子树之分,次序不能任意颠倒。二叉树的存储结构可以用顺序存储和链式存储来存储。二叉树一般使用链式存储结构,由二叉树的定义可知,二叉树的结点由一个数据元素和分别指向其左右孩子的指针构成,即二叉树的链表结点中包含3个域,这种结点结构的二叉树存储结构称之为二叉链表。
typedef struct tnode { elemtype data; struct tnode *lchild; struct tnode *rchild; }*bitree, bitnode;
创建一棵二叉树
int create_bitree(bitree *bt) { elemtype data; scanf("%d", &data); if (0 == data) { *bt = NULL; } else { *bt = (bitree)malloc(sizeof(bitnode)); if (!(*bt)) exit(OVERFLOW); (*bt)->data = data; create_bitree(&(*bt)->lchild); create_bitree(&(*bt)->rchild); } return OK; }
二叉树的遍历
//先序void preorder(bitree bt, int (*visit)(elemtype e)) { if (bt) { visit(bt->data); preorder(bt->lchild, visit); preorder(bt->rchild, visit); } } //中序void inorder(bitree bt, int (*visit)(elemtype e)) { if (bt) { inorder(bt->lchild, visit); visit(bt->data); inorder(bt->rchild, visit); } } //后序void postorder(bitree bt, int (*visit)(elemtype e)) { if (bt) { postorder(bt->lchild, visit); postorder(bt->rchild, visit); visit(bt->data); } }
二叉树的深度
int get_tree_depth(bitree bt) { int ldepth, rdepth; if (!bt) return 0; else if (!bt->lchild && !bt->rchild) return 1; else { ldepth = get_tree_depth(bt->lchild); rdepth = get_tree_depth(bt->rchild); return (ldepth > rdepth ? ldepth : rdepth) + 1; } }
叶子结点数
int get_num_of_leave(bitree bt) { if (!bt) return 0; else if (!bt->lchild && !bt->rchild) return 1; else return (get_num_of_leave(bt->lchild) + get_num_of_leave(bt->rchild)); }
释放二叉树
void free_bitree(bitree *bt) { if (*bt) { if ((*bt)->lchild) free_bitree(&(*bt)->lchild); if ((*bt)->rchild) free_bitree(&(*bt)->rchild); free(*bt); *bt = NULL; } }
阅读全文
0 0
- 二叉树的二叉链表表示与实现
- 二叉树的二叉链表表示与实现
- 二叉树的二叉链表表示与实现
- 二叉树的二叉链表表示与实现
- 二叉树的二叉链表表示与实现
- 二叉树的二叉链表表示和实现
- 二叉树的链表表示法实现
- 二叉树的链表表示 C++实现
- 二叉树链表表示
- 小程序-----链表表示二叉树
- 静态链表表示二叉树
- 二叉树链表表示法
- 广义表表示二叉树结构生成二叉链表的算法
- 二叉树的查找、二叉树高度、二叉树获得双亲结点、构造二叉树、二叉树的广义表表示法、二叉树的插入删除、二叉树的非递归实现
- 广义表表示树二叉树
- 数据结构——二叉树的孩子链表表示法
- 第6章 树和二叉树——递归方法先序、中序、后序遍历二叉链表表示的二叉树
- 二叉树的二叉链表实现
- iOS-77-解决iOS9闪退,在iOS10上正常的问题;以及解决百度导航sdk导致审核不通过
- CheckedComboBoxEdit
- HDU
- 虚拟现实的特征
- leetcode--Min Stack
- 二叉树的二叉链表表示与实现
- 数字在排序数组中出现的次数
- Spring@Autowired注解与自动装配
- 学函数式编程和装饰器
- pandas 终极版3:DataFrame 的增、删、改、查、排序
- php命令行模式(cli)的使用(总结)
- Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】
- PHP解耦的三重境界(浅谈服务容器)
- 嵌入式系统Boot Loader启动全过程详解