![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Duc_Duke
天行健君子以自强不息、地势坤君子以厚德载物。
展开
-
二叉树_二叉树的定义及基础操作
二叉树:二叉树是n(n≥0)个结点的有限集合,二叉树的每个结点至多有两棵子树。二叉树的子树被称作左子树和右子树。 满二叉树:深度为k,且有2^k-1个节点的二叉树,这种树的特点是每一层上的节点数都是最大节点数。 完全二叉树:在一棵二叉树中,除最后一层外,其余层都是满的且最后一层或满、或是在右边缺少连续若干节点。 二叉树的性质: (1) 在非空二叉树中,第i层的结点总数不超过, i>=1...原创 2019-07-30 14:07:25 · 514 阅读 · 0 评论 -
BST
BST(Binary Search Tree):二叉查找树,也叫二叉搜索树,二叉排序树,其目的是为了提高查找的效率,其查找在平均和最坏的情况下都是logn级别,接近二分查找 BST性质: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 BST原理: 通常采取二叉链表作为二叉排序...原创 2019-08-12 21:12:59 · 211 阅读 · 0 评论 -
二叉树_线索化二叉树
#include<assert.h> #include<iostream> #include<vector> #include<stack> #include<queue> using namespace std; typedef char ElemType;#define END '#'typedef enum //存在...原创 2019-08-11 20:06:27 · 236 阅读 · 0 评论 -
链表_链表相关问题
//定义链表的结点 struct ListNode { int m_nKey; ListNode* m_pNext; }; //链表的初始化 void Init(ListNode* phead) { assert(phead != NULL); if (phead == NULL) { return; } phead->...原创 2019-07-30 18:38:23 · 212 阅读 · 0 评论 -
链表_双向链表
typedef int ELEM_TYPE; typedef struct Node { ELEM_TYPE mdata; struct Node* pnext; struct Node* prev; }DNode,*PDList; void Init(PDList pl); DNode* BuyNode(ELEM_TYPE val); Status InsertHea...原创 2019-07-30 18:29:08 · 152 阅读 · 0 评论 -
链表_单链表_带头节点的单链表
带头节点的单链表: typedef int ELEM_TYPE; typedef struct Node { ELEM_TYPE mdata; struct Node* pnext; }Node, *Link; void Init(Link phead); static Link BuyNode(); bool InsertTail(Link phead, ELEM_TYPE ...原创 2019-07-30 18:24:38 · 170 阅读 · 0 评论 -
链表_单链表_不带头节点的单链表
不带头节点的单链表: typedef int ELEM_TYPE; typedef struct Node { ELEM_TYPE mdata; struct Node* pnext; }Node,*PNode; void Init(PNode* phead); bool InsertTail(PNode* phead, ELEM_TYPE val); bool InsertH...原创 2019-07-30 18:04:47 · 166 阅读 · 0 评论 -
二叉树_相关问题
//二叉树的镜像:反转二叉树 void Minerro(BtNode* ps) { if(ps == NULL) return ; if(ps->leftchild == NULL && ps->rightchild == NULL) return ; BtNode * s = ps->leftchild...原创 2019-07-30 14:35:12 · 177 阅读 · 0 评论 -
二叉树_二叉树的序列化与反序列化
二叉树的序列化:即将一颗二叉树转化为一位数的过程 void LinkMakeAr(BtNode *ptr,ElemType *buff,int i); void LinkCreateAr(BtNode *root,ElemType *buff,int n) { if(root == NULL || buff == NULL) return; for(int i =...原创 2019-07-30 14:27:18 · 166 阅读 · 0 评论 -
二叉树_二叉树的遍历
二叉树的遍历: #include<iostream> #include<vector> #include<stack> #include<assert.h> using namespace std; //前序遍历打印二叉树: void PreOrder(BtNode *p) { if(NULL != p) { cou...原创 2019-07-30 14:20:26 · 147 阅读 · 0 评论 -
二叉树_二叉树的创建
二叉树的创建 方法一:给定二叉树的数组元素序列和大小创建二叉树 BtNode * CreateBin(ElemType *ar,int left,int right); BtNode * CreateBinary(ElemType *ar,int n) { if(NULL == ar || n < 1) return NULL; else r...原创 2019-07-30 14:14:28 · 210 阅读 · 0 评论 -
n后问题
递归思路:把棋盘存储为一个N维数组a[N+1],数组中第i个元素的值代表第i行的皇后位置,这样便可以把问题的空间规模压缩为一维O(N),在判断是否冲突时也很简单,首先每行只有一个皇后,且在数组中只占据一个元素的位置,行冲突就不存在了,其次是列冲突,判断是否有a[i]与当前要放置皇后的列k相等即可。至于斜线冲突,通过观察可以发现所有在斜线上冲突的皇后的位置都有规律即它们所在的行列互减的绝对值相等。...原创 2019-09-20 14:37:15 · 353 阅读 · 0 评论