数据结构之二叉树
二叉树
Binary Oracle
一名热爱开源和技术的Coder , 开源框架spring committer , golang开源网络库netpoll committer; (脱产备战25考研中,停更一年)
展开
-
哈夫曼编码
哈夫曼树的应用—哈夫曼编码1.哈夫曼编码是一种可以被唯一解读的二进制编码2.前缀编码保证了解码时不会有多种可能3.哈夫曼编码有不等长和等长两种编码,为了保证不等长编码的唯一性,使用前缀编码4.频率低的采用短编码,频率高的采用长编码。出现次数多的靠近根节点,出现次数少的远离根节点,这样可以得到最小的带权路径长度,这样是最节省空间的哈夫曼编码方案:从叶子到根逆向求每个字符的哈夫曼编码第三个参数是所要求的哈夫曼编码的个数,要求几个字母的哈夫曼编码就传入几哈夫曼编码生成//原创 2021-03-17 09:41:50 · 8317 阅读 · 1 评论 -
哈夫曼树
哈夫曼树1.相关概念2.哈夫曼树的特点为了让带权路径长度计算值最小3,哈夫曼树的基本思想4.哈夫曼树的构造过程5.哈夫曼树的存储结构6.伪代码7.图示8.代码9.例子在这里插入代码片...原创 2021-03-16 22:02:49 · 1061 阅读 · 0 评论 -
非递归遍历二叉树---c++写法
前序遍历的非递归算法#include<iostream>using namespace std;#include<stack>struct node{ char data; node* lchild; node* rchild;};//树的建立---前序建立void creatTree(char ch[10],node*& root){ static int i = 0; if (ch[i] == '#') { i++; root原创 2021-03-15 22:50:00 · 355 阅读 · 0 评论 -
线索二叉树
前驱节点:对一棵二叉树进行中序遍历,遍历后的顺序,当前节点的前一个节点为该节点的前驱节点;后继节点:对一棵二叉树进行中序遍历,遍历后的顺序,当前节点的后一个节点为该节点的后继节点;线索中序二叉树实现的代码下面这种方法错误,因为同级指针修饰是值传递在这里插入代码片...原创 2021-03-15 11:54:50 · 319 阅读 · 3 评论 -
二叉树与多叉树和森林之间的转化
多叉树转化为二叉树森林转化为二叉树二叉树转化为树或者森林原创 2021-03-13 16:40:47 · 390 阅读 · 0 评论 -
二叉树的创建
定义二叉树类按照前序遍历的方式生成树:根左右二叉树创建代码:node* Tree::creat(node* root){ char ch = _getch();//输入该节点的信息 if (ch == '#')//表示该节点为空 { root = NULL; } else { root = new node; root->data = ch; //生成一个节点,数据为ch //这里是同级指针修饰,是值传递,可以用返回值解决 root->l原创 2021-03-13 13:50:52 · 16455 阅读 · 0 评论 -
二叉树层序遍历
层序遍历的思路:#include<iostream>using namespace std;#include<queue>//树的结构体struct BinaryNode{ char data; BinaryNode* lchild; BinaryNode* rchild;};//层序遍历void output(BinaryNode* Anode){ //初始化队列 queue<BinaryNode> tree; //判断传入的根指针是.原创 2021-03-12 20:15:43 · 99 阅读 · 0 评论 -
树的逻辑结构和存储结构
树的逻辑结构树的存储结构原创 2021-03-12 19:39:17 · 392 阅读 · 0 评论 -
二叉树的非递归遍历
代码演示原创 2021-03-06 10:53:04 · 99 阅读 · 0 评论 -
二叉树的拷贝和释放操作
思路:先通过递归一直找到叶子(即最后一层结点),再回溯,拷贝叶子的左子树,再右子树,然后重复往上面根结点回溯,直到最上层的根结点释放:释放在堆区创建的结点#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//二叉树的递归遍历struct BinaryNode { //数据域 char ch; //指针域 BinaryNode* lchild; //指向左孩子的指针 BinaryN原创 2021-03-05 17:41:07 · 620 阅读 · 0 评论 -
求叶子的数量和树的高度
求叶子的数量:递归来求第一种写法://计算叶子的数量int getLeafNum(BinaryNode* root){ if (root == NULL) return 0; ////叶子的数量:这里不能用局部遍量,因为局部遍量生存周期只有在当前函数 static int num=0; //当左子树和右子树都等于NULL时,为叶子 if (root->lchild == NULL && root->rchild == NULL) { num++原创 2021-03-04 19:03:01 · 478 阅读 · 1 评论 -
二叉树的递归遍历
遍历定义:遍历用途:遍历方法:先处理每个根的左子树,再到右子树``先序遍历#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>//二叉树的递归遍历struct BinaryNode { //数据域 char ch; //指针域 BinaryNode* lchild; //指向左孩子的指针 BinaryNode* rchild; //指向右孩子的指针};//递归遍历:传入根结点指针void recursi原创 2021-03-04 16:56:48 · 167 阅读 · 1 评论 -
二叉树概念
二叉树基本概念:定义:逻辑结构:一对二(1:2)基本特征:基本形态:最后一个是空树,倒数第二个只有一个根结点二叉树性质满二叉树完全二叉树原创 2021-03-03 22:58:23 · 117 阅读 · 2 评论 -
树的基本概念
树的基本概念树的定义:树的结构特点:若干术语树的表示法图形表达法:广义表表示法左孩子右兄弟表示法作用: 将多叉树转化为二叉树原创 2021-03-03 21:23:44 · 210 阅读 · 3 评论