自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 王道ch4-BiTree-20.将给定表达式二叉树转换为等价中缀表达式输出

//任务:将给定表达式二叉树转换为等价中缀表达式输出//算法思想:在遍历左子树之前加左括号,遍历完左子树后输出中间结点,在遍历右子树之后加右括号void InOrder(BiTree2& T,int deep){ if (T == NULL) return; else if (T->lchild == NULL && T->rchild == N...

2019-10-25 16:02:57 1500 3

原创 王道ch4-BiTree-19.求二叉树所有叶结点的带权路径长度之和WPL

//任务:求二叉树所有叶结点的带权路径长度之和WPL(一个叶结点的带权路径长度=叶结点的权值*叶结点到根节点的路径长度(线的个数))//算法思想:利用层次遍历记录层数,如遇到叶子结点则用叶子结点×(层数-1)int WPL(BiTree& T){ SqQueue Q; InitQueue(Q); BiTree p = T;int last, level = 0,wpl=0; ...

2019-10-25 16:00:29 1095

原创 王道ch4-BiTree-17.判断两棵二叉树是否相似,两棵都是空树,或只有一个结点为相似的,或者两棵树的左子树左子树是相似的,右子树右子树相似

//任务:判断两棵二叉树是否相似,两棵都是空树,或只有一个结点为相似的,或者两棵树的左子树左子树是相似的,右子树右子树相似bool similar(BiTree& T1, BiTree& T2){ bool l, r; if (T1 == NULL && T2 == NULL) return true; else if (T1 == NULL || ...

2019-10-25 14:00:46 205

原创 王道ch4-BiTree-16.将二叉树的叶结点按照从左到右的顺序连成一个单链表

//任务:将二叉树的叶结点按照从左到右的顺序连成一个单链表BiTree pre = NULL, head;BiTree leaf(BiTree& p){ if (p) { if (p->lchild == NULL && p->rchild == NULL) if (pre == NULL) { pre = p; head ...

2019-10-25 13:58:07 1308 1

原创 王道ch4-BiTree-14.计算二叉树的宽度,即二叉树中结点最多的一层的结点个数

int BtWidth(BiTree& T){ int last, max =1; SqQueue Q; InitQueue(Q); BiTree p = T; EnQueue(Q, T); last = Q.rear; while (!IsEmpty(Q)) { DeQueue(Q, p); if (p->lchild) EnQueue(Q,...

2019-10-25 13:57:21 479

原创 王道ch4-BiTree-12.找到值为x的所有祖先

//任务:找到值为x的所有祖先//利用后序遍历,可以找到一个结点到任意祖先的路径。//具体来说,后序遍历的非递归算法思想是,先遍历左子树右子树然后是根。//先将根结点入栈,然后指针一直向左移动直到某结点没有左孩子时,指针为空,这时取栈顶元素(注意不是出栈)//来检查这个栈顶结点是否有右孩子,如果有,判断这个右孩子开始是否被访问过,如果没访问过,则将指针指向右孩子并将它入栈//,然后开始...

2019-10-25 13:56:13 382

原创 王道ch4-BiTree-11.删除二叉树中,所有结点值为x的结点,删去以他为根的子树

//任务:删除二叉树中,所有结点值为x的结点,删去以他为根的子树。//算法思想:要删除次结点,必须先删除他的左右子树,故应该使用后序遍历,//根据层次遍历,找到本结点的左孩子和右孩子判断左孩子右孩子的值,若相等则删除左子树,右子树和它自己。void del_x(BiTree& T){ if (T != NULL) { del_x(T->lchild); del_...

2019-10-25 11:41:41 851

原创 王道ch4-BiTree-10.找到二叉树先序遍历的第k个结点并输出它的值

//任务:找到二叉树先序遍历的第k个结点并输出它的值int c=1;int ProNode_k(BiTree& T, int k){ int ch; if (T == NULL) return 999; if (c == k) { return T->data; } c++; ch=ProNode_k(T->lchild, k);...

2019-10-25 11:40:43 421

原创 王道ch4-BiTree-9.将树中每个结点的左右子树交换

//任务:将树中每个结点的左右子树交换//算法思想:利用层次遍历void swap(BiTree& T){ SqQueue Q; InitQueue(Q); BiTree p = T, temp; EnQueue(Q, T); while (!IsEmpty(Q)) { DeQueue(Q, p); if (p) { if (p->lchild)...

2019-10-25 11:39:06 187

原创 王道ch4-BiTree-中序遍历线索化二叉树,线索二叉树的中序遍历

//任务:已知先序遍历中序遍历构造二叉树ThreadTree preInCreate(int A[], int startA, int endA, int B[], int startB, int endB){ int i, llen, rlen; ThreadTree root = (ThreadTNode*)malloc(sizeof(ThreadTNode)); root-&gt...

2019-10-22 20:41:17 346

原创 王道ch4-BiTree-8找出二叉树的双分支结点

//任务:找出二叉树的双分支结点int dsonNode(BiTree& T){ SqQueue Q; InitQueue(Q); BiTree p = T; EnQueue(Q, p); int i = 0; while (!IsEmpty(Q)) { DeQueue(Q, p); if (p) { if (p->lchild &&amp...

2019-10-22 20:39:19 225

原创 王道ch4-BiTree-7判断是否是完全二叉树

//任务:判断是否是完全二叉树//算法思想:将二叉树所有结点按照层次遍历依次入队,包括空结点//如果出队的结点不为空,则将左右子树入队,如果出队的结点为空,则不将其左右子树入队//将剩余结点全部出队查看是否有非空节点,如果有非空节点,则不是完全二叉树bool Iscomplete(BiTree& T){ BiTree p = T; SqQueue Q; InitQueue(...

2019-10-22 20:38:23 185

原创 王道ch4-BiTree-5用非递归算法计算二叉树的高度

//任务:用非递归算法计算二叉树的高度//算法思想:使用层次遍历,利用队列指针,设置一个专门的指针last专门指向一层元素的最后一个元素//将一层中最后一个元素之前的元素依次出队,并将每个元素的孩子结点入队,那么当一层之中最后一个结点//出队之时,这一层所有的孩子结点已经全部入队,即此时的尾指针只想了下一层最后一个结点之后,//我们将last指向尾指针,以代表本层遍历结束int Btd...

2019-10-22 20:37:36 279

原创 王道ch4-BiTree-4按照从下往上,从右往左的顺序层次遍历二叉树

void InvertLevel(BiTree& T){ SqStack S; SqQueue Q; Init(S); InitQueue(Q); BiTree p = T; EnQueue(Q,T); while (!IsEmpty(Q)) { DeQueue(Q, p); Push(S, p); if (p->lchild) EnQueue(Q,...

2019-10-22 20:36:22 188

原创 王道ch4-BiTree-先序中序,后序中序构造二叉树,递归的先序后序中序层次遍历,非递归的先序中序后序层次遍历

#include "BiTNode.h"#include "SqStack.h"#include "SqQueue.h"#include <iostream>using namespace std;//任务:已知先序遍历中序遍历构造二叉树BiTree preInCreate(int A[], int startA, int endA, int B[], int start...

2019-10-22 20:35:16 243

原创 王道ch4-BiTree-二叉树链式存储和二叉树线索化结点的定义

//二叉树链式存储typedef struct BiTNode { int data; struct BiTNode* lchild, * rchild;}BiTNode, * BiTree; //线索化二叉树typedef struct ThreadTNode { int data; struct ThreadTNode* lchild, * rchild; int ltag...

2019-10-22 20:30:21 240

原创 王道ch3-Stackp90_2.有一个列车,HS分别表示硬座软座,利用一个栈将序列调整为S在H之前

//任务:有一个列车,HS分别表示硬座软座,利用一个栈将序列调整为S在H之前//算法思想,H入栈,S入栈后马上出栈void H_S(char* str){ SqStack S; Init(S); int i = 0,j=0,k=0; char* p = str; char x; while (str[i]!='\0') { if (str[i] == 'H') Push...

2019-10-15 21:30:09 176

原创 王道ch3-Stackp90_1.用栈判断括号序列是否匹配

//任务,用栈判断括号序列是否匹配bool BracketsCheck(char* str){ SqStack S; Init(S); int i = 0; char x; while (str[i]!='\0') { switch (str[i]) { case '(':Push(S, '('); break; case '[':Push(S, '['); br...

2019-10-15 21:29:12 163

原创 王道ch3-Stack3.判断进栈出栈序列是否合法

//任务:判断进栈出栈序列是否合法bool Legical(char* str){ int j=0,i=0; while (str[i]!='\0') { if (str[i] == 'I') j++; else j--; i++; if (j < 0) { //cout << j; return false; } }...

2019-10-15 21:28:06 111

原创 王道ch3-Stack栈的定义,初始化,判栈空,进栈,出栈,读栈顶元素

//栈的定义,初始化,判栈空,进栈,出栈,读栈顶元素#define Maxsize 50typedef struct SqStack { char data[Maxsize]; int top;}SqStack;typedef struct LinNode { int data; struct LinNode* next;}*LinStack;//初始化void Init...

2019-10-15 21:27:00 223 1

原创 王道ch1-LinkList23.删除单链表绝对值相同的数(时间尽可能高效)

//任务:删除单链表绝对值相同的数//算法思想:设置一个数组,用于判断是否出现过绝对值相同的元素,//将出现过的元素在数组对应位置中标记为1//如果之后的元素在数组中等于1,说明之前出现过相等的绝对值,将他删除void del_same(LinkList& L, int n){ int m; int* q = new int[n + 1]; LNode* p = L,*r...

2019-10-13 22:46:22 282

原创 王道ch1-LinkList21.用高效算法输出单链表中倒数第k个值

//任务:用高效算法输出单链表中倒数第k个值//算法思想:设置两个指针pq,均指向第一个节点,p向后移动到第k个结点,两个指针同时后移//q就指向倒数第k个结点,只需要一次遍历int Search_k(LinkList& L,int k){ LNode* p = L->next,* q = L->next; int i = 1; while (i < k)...

2019-10-13 22:41:30 128

原创 王道ch1-LinkList16.判断B是否为A的子序列

//任务:判断B是否为A的子序列//算法思想:比较A与B,若相等则用pre记录此时的A,同时后移,不相等则将B放到开头,A放到pre之后比较int Pattern(LinkList& A, LinkList& B){ LNode* ra = A->next, * rb = B->next,*pre=ra; while(ra&&rb) if...

2019-10-13 22:40:54 431

原创 王道ch1-LinkList15.AB中元素递增排列,找到交集并存放在A中

//任务:AB中元素递增排列,找到交集并存放在A中//算法思想:采用归并思想,一次比较,如果相等,将B中释放,B<A,删除B所在结点,指针后移//如果A没遍历完删除A,B没遍历完删除Bvoid Merge_same(LinkList& A, LinkList& B){ LNode* ra = A->next, * rb = B->next,*preA=...

2019-10-13 22:40:07 181

原创 王道ch1-LinkList14.A,B递增有序,用A,B中值相同的元素组成C,不破坏A,B

//任务:A,B递增有序,用A,B中值相同的元素组成C,不破坏A,B//算法思想:依次比较每个结点,如果AB相等,则建立新结点尾插法放入C,A>B,B指针移动void Create_same(LinkList& A, LinkList& B, LinkList& C){ LNode* ra=A->next, * rb=B->next,*s,*r=...

2019-10-13 22:37:44 120

原创 王道ch1-LinkList13.A,B递增排列,将两个单链表归并为递减序列,用原来的结点存放

//任务:A,B递增排列,将两个单链表归并为递减序列,用原来的结点存放//算法思想:摘下A的头结点,两个链表依次比较,较小的头插法放入A中。void Merge(LinkList& A, LinkList& B){ LNode* pa=A->next, * pb=B->next, * ra, * rb; A->next = NULL; while (...

2019-10-13 22:37:02 147

原创 王道ch1-LinkList12.删除单链表(递增有序)中重复的值

void del_same(LinkList& L){ LNode * p = L->next,*q; if (p->next == NULL) return; while (p->next) { q = p->next; if (p->data == q->data) { p->next = q->next...

2019-10-13 22:36:10 251 1

原创 王道ch1-LinkList11.A中a1,b1,a2,b2..an,bn,拆成A为a1a2a3,B为b3b2b1

//任务:A中a1,b1,a2,b2..an,bn,拆成A为a1a2a3,B为b3b2b1//算法思想,将b用头插法插入B中void Dis_Create2(LinkList& A, LinkList& B){ LNode* ra=A, * p=A->next, * q; while (p) { ra->next = p; ra = p; p ...

2019-10-12 20:55:37 293

原创 王道ch1-LinkList10.将带头结点的链表A分解为两个带头结点的A和B,A中含有序号为奇数的元素,B序号为偶数

//任务:将带头结点的链表A分解为两个带头结点的A和B,A中含有序号为奇数的元素,B序号为偶数//算法思想,将A中偶数的摘下来放到B中,奇数的留下void Dis_create(LinkList& A, LinkList &B){ int i = 1; LNode* pre=A, * p = A->next; LNode* r = B; while (p) ...

2019-10-12 20:54:52 314

原创 王道ch1-LinkList9.按递增序列输出单链表中各节点数据元素,并删除此元素

//任务:按递增序列输出单链表中各节点数据元素,并删除此元素//思想,遍历一次找到一个最小结点,输出并删除,以此类推遍历n次,每次都找到最小结点输出并删除,//时间复杂度n²void del_min(LinkList& L){//minpre用于记录最小结点的前驱结点 LNode * minpre = L, * p = L->next,*q; while (L->...

2019-10-12 20:53:59 435

原创 王道ch1-LinkList7.删除单链表中介于st之间的值

bool del_s_t(LinkList& L, int s,int t){ LNode* pre=L, * p=L->next; if (s > t) return false; while (p) { if (p->data>s && p->data<t) { pre->next = p->...

2019-10-12 20:53:12 138

原创 王道ch1-LinkList6.使单链表递增有序(带头结点)

//采用直接插入的算法思想,先摘下头结点和第一个节点,作为有序表,//遍历剩下的链表,与有序表比较,插入。void Sort(LinkList& L){ LNode* p=L->next, * r=p->next, * pre=L; p->next = NULL; while (r) { p = r; r = p->next; while (...

2019-10-12 20:52:17 362

原创 王道ch1-LinkList5.将单链表就地逆置

//任务:将单链表就地逆置//思想,将头结点摘下,利用头插法插入void Reverse(LinkList& L){ LNode* p, * r; p = L->next; L->next = NULL; while (p) { r = p->next; p->next = L->next; L->next = p; p...

2019-10-12 20:50:40 315

原创 王道ch1-LinkList4.删除单链表(带头节点)中最小值结点

void del_min(LinkList& L){ LNode* p = L->next, * pre = L; LNode* min = p, * premin = pre; if (L->next == NULL) return; pre = p; p = p->next; while (p) { if (p->data < mi...

2019-10-12 20:48:57 239

原创 王道ch1-LinkList3.将单链表中结点数逆置输出

void R_print(LinkList& L){ if (L->next != NULL) R_print(L->next); cout << L->data<<" ";}int main(){ LinkList L; tailInsert(L); R_print(L); return 0;}

2019-10-12 20:48:10 142 1

原创 王道ch1-LinkList2.删除单链表(带头节点)中所有x

void del_x(LinkList& L, int x){ LNode* p=L->next,*pre=L,*q; if (L->next == NULL) return; while (p) { if (p->data == x) { pre->next...

2019-10-12 20:47:12 153

原创 王道ch1-LinkList1.使用递归方法删除单链表(不带头节点)中所有x

//任务:使用递归方法删除单链表(不带头节点)中所有xvoid del_x(LinkList& L, int x){ LNode* p; if (L == NULL) return; if (L->data == x) { p = L;//因为L为引用,直接对原链表进行操作,不会断链! L = L->next; free(p); del_x(L...

2019-10-12 20:46:03 410

原创 王道ch1-双链表的定义,创建(尾插法),插入,删除

双链表的定义//双链表定义typedef struct DNode { int data; struct DNode* prior, * next;}DNode,*DLinkList;创建(尾插法)//尾插法创建双链表DLinkList DheadInsert(DLinkList& L) { int x; L = (DLinkList)malloc(sizeo...

2019-10-11 18:17:36 254

原创 王道ch1-单链表的定义,创建,按序号查找,按值查找,插入,删除,求表长

定义typedef struct LNode { int data; struct LNode* next;}LNode,*LinkList;创建,分为头插法和尾插法//单链表头插法LinkList headInsert(LinkList& L){ int x; LNode* s; L = (LinkList)malloc(sizeof(LNode)); L...

2019-10-11 18:14:05 491

原创 王道ch1-Sqlist13.寻找一个数组中未出现的最小正整数

#include <iostream>using namespace std;//任务:寻找一个数组中未出现的最小正整数#define Initsize 50typedef struct { int* data; int length, maxsize;}SqList;//初始化void Init(SqList& L){ int i; L.data =...

2019-10-10 21:13:32 170

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除