![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构-树&&二叉树
文章平均质量分 78
parting_soul
大道至简
展开
-
普通树的存储与遍历(合集)
1.双亲表示法#include#include#define maxn 1111using namespace std;typedef struct node{ char data;//节点的值 int parent;//该节点的父亲}node;typedef struct tree{ node treelist[maxn];//节点 int l原创 2015-11-11 20:00:57 · 534 阅读 · 0 评论 -
二叉树的路径和
题目描述: 给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。 一个有效的路径,指的是从根节点到叶节点的路径。思路: 二叉树前序遍历.1. 若当前节点为空,则直接返回2. 当前节点不为空,从根节点的路径和加上该节点的值得到根节点到该节点的和3. 当前节点的左儿子和右儿子为空,判断当前和是否与目标和一致,若一致,则保存路径,然后返回4. 当前节点原创 2017-06-28 20:26:45 · 484 阅读 · 0 评论 -
括号表示转孩子数组表示法
思路:有一个括号表示的一串序列,假设为A(B,C(Q,E),D),我们发现出现(则表示下面一些元素为(前面一个元素的子女,知道出现),所以们在出现(时,就要把之后的元素与他的父亲相连,这里用孩子数组法,也就是父亲节点保存了所有孩子的下标,每次遇到(,就要保存他前一个元素,可以把它压入栈中,然后之后遇到的字母都为该栈顶的子女,直到遇到右括号,用栈的好处就是当括号里还有括号,考虑到就进原则,括号内的元原创 2015-11-14 11:27:06 · 880 阅读 · 0 评论 -
Huffman树(二叉树)
算法思想:(二叉树)给定n个权值构造一个huffman树,将n个权值节点从小到大进行排列,建立一个单链表,然后每次选择表头最小的两个节点,把他们作为一个新节点的儿子,头节点的权值为左右儿子权值之和,然后断绝原来两个节节点和原有序链表的关系并将新建节点插入有序链表,不断进行这个过程,知道只有一个根节点。若建立m叉Huffman树,有n个权值节点,要插入x个全值为零的点,使得(n-k+原创 2015-12-14 19:35:01 · 675 阅读 · 0 评论 -
二叉排序树
特点:1)左子树非空则左子树所有节点的值小于根节点2)右子树非空则右子树所有节点的值大于根节点3)左右子树都为二叉排序树查找次数等于树高,最坏情况为o(n),最好为o(log n)以中序遍历输出则为有序序列,也可以称为树排序,排序复杂度o(n*log n)# include#include#includeusing namespace std;typedef i原创 2015-12-13 21:17:44 · 381 阅读 · 0 评论 -
括号表示法转孩子指针法
具体思想与括号转孩子数组法相同,只不过这里由指针方式实现详见#include#include#include#define maxn 111111#define m 3using namespace std;struct Tree{ char data; Tree *child[m]; Tree(){memset(child,0,sizeof(child)原创 2015-11-14 12:52:20 · 530 阅读 · 0 评论 -
前序遍历的层号表示转孩子数组表示法
思路:有一个层号表示法,如 1a,2b,2s,3v,3e,2e,3w我们可以看出若当前层号比前一个的层号要大,则说明该节点是前一个节点的儿子,若相等,则说明是兄弟,若小于,则说明前面最近的那棵子树建立完毕。当前点的层号比上个节点大时,直接将该节点的父亲记录为上一个节点,若相等,记录兄弟的父亲,若小于,则不断找该节点的兄弟。#include#include#include#defi原创 2015-11-22 16:31:28 · 564 阅读 · 0 评论 -
二叉树的各类遍历
#include#include#include#include#define maxn 1111using namespace std;struct BinTree{ char data; BinTree *lchild,*rchild; int nc; BinTree(){nc = 0;}};BinTree* build(BinTree *t)原创 2015-11-23 00:07:21 · 216 阅读 · 0 评论 -
二叉树首尾点的寻找
#include#include#include#define maxn 1111using namespace std;struct Tree{ Tree *lchild,*rchild; char data;};Tree* buildbypre(Tree *t){ char c; cin>>c; if(c=='#') return NU原创 2015-11-23 00:46:36 · 425 阅读 · 0 评论 -
层号表示法转孩子兄弟表示法(二叉树)
孩子兄弟表示法:左儿子,右兄弟思路:建树建完一个节点,将其压入栈,以便下一个元素与他比较层号#include#include#include#define maxn 1111#define m 3using namespace std;struct Tree{ Tree *lchild,*rchild; char data; int leve;//记录该节点原创 2015-11-22 20:15:02 · 1301 阅读 · 0 评论 -
孩子指针表示法关于前序遍历的括号表示和凹入表示
#include#include#define maxn 11111#define m 3using namespace std;typedef struct k{ char data; struct k *child[m];}Tree;Tree *createbypre(Tree *t){ char c; cin>>c; if(c=='#原创 2015-11-12 12:07:23 · 817 阅读 · 0 评论