随笔分类 -  数据结构

摘要:冒泡排序 基本方法:首先第一趟,把从最后一个元素到第一个元素,相邻两个元素间进行两两比较,把较小的放到前面,这样第一趟结束后就把最小的放到了数组的第一个位置;然后第二趟出去第一个位置的元素(最小的元素),总最后一个到第二个,重复上面操作;然后进行n-1趟,至此就把所有数据都完成了排序。 基本的冒泡排 阅读全文
posted @ 2019-06-11 21:55 +D 阅读(161) 评论(0) 推荐(0)
摘要:105. 从前序与中序遍历序列构造二叉树 根据前序遍历和中序遍历,我们可以发现前序遍历的第一个元素就为根元素,在中序遍历中找到这个元素,那么中序遍历中左边为根元素的左子树,右边为右子树,依次递归。 /** * Definition for a binary tree node. * public c 阅读全文
posted @ 2019-05-18 22:19 +D 阅读(1137) 评论(0) 推荐(1)
摘要:101 对称二叉树 C++代码(递归): 递归的判断两个结点是否相等,两个结点都为空则相等,两个结点一个为空则不相等,两个结点都不为空但如果他们的val相等且左右子树也相等,则这两个结点相等,左右子树的判断又可以通过比较两两对称的结点。 java代码(迭代法): 用一个链表,把树的每一层按对称方式  阅读全文
posted @ 2019-05-15 23:08 +D 阅读(195) 评论(0) 推荐(0)
摘要:102 二叉树的层序遍历 这个题目和书上不一样的地方就是不同的层的放在一个vector中,每层可以区分开。于是,我们可以定义一个count,用来计算每一层的结点数。 用队列来存放树的结点。 C++代码: Java代码: Java中对于Queue来说,就是一个FIFO(先进先出)的队列,添加元素只能在 阅读全文
posted @ 2019-05-11 23:03 +D 阅读(4618) 评论(0) 推荐(0)
摘要:145 二叉树的后序遍历 后序遍历,先访问左子树然后访问右子树然后访问根节点。 C++代码 java代码 阅读全文
posted @ 2019-05-07 21:15 +D 阅读(405) 评论(0) 推荐(0)
摘要:144 二叉树的前序遍历 这个思路与二叉树的中序遍历一样,只是先把每一个新的根结点,先把起值放入要返回的列表,然后把它存起来,等遍历完左子树然后返回继续访问其右子树。 C++代码 Java代码 阅读全文
posted @ 2019-05-06 23:04 +D 阅读(232) 评论(0) 推荐(0)
摘要:94 二叉树的中序遍历 中序遍历就是先访问树的左子树,然后访问根结点,最后访问右子树 中序遍历(非递归) java代码: ArrayList用来存储节点数据 当根节点不为空时,则把根结点入栈,然后以它的左子树为根节点继续往下判断(根节点不为空时,则把根结点入栈),直到某个左子女结点为空时,则执行出栈 阅读全文
posted @ 2019-05-05 23:11 +D 阅读(662) 评论(0) 推荐(0)
摘要:队列是另一种限定存取位置的线性表。它只允许在表的一头插入(队尾rear),在另一头删除(队头front)。 链式队列就是基于单链表存储,队列的头指针指向单链表的第一个结点,队尾指针指向单链表的最后一个给结点。 链表队列的实现: #include<iostream> using namespace s 阅读全文
posted @ 2019-04-16 22:00 +D 阅读(249) 评论(0) 推荐(0)
摘要:定义:栈是一种后进先出的线性表或者说是只允许在表的末端进行插入和删除的线性表。 栈有顺序栈(基于数组的存储表示实现)和链式栈(基于链表的存储实现)。 这里实现的是链式栈,链式栈的栈顶是链表的表头,新节点的插入删除均在栈顶(表头)进行。 1 #include<iostream> 2 using nam 阅读全文
posted @ 2019-04-09 12:47 +D 阅读(595) 评论(0) 推荐(0)
摘要:线性表的存储表示有两种:顺序存储(顺序表,是用数组作为表的存储结构)和链表存储 顺序表优点: 无需为表示结点间的逻辑关系而增加额外的存储空间,存储利用率高 可以方便的进行随机存取顺序表中的任一结点,存取速度块 顺序表缺点: 表中插入或者删除某一元素时,为了保持其他元素相对次序不变,平均要移动一半的元 阅读全文
posted @ 2019-03-31 20:35 +D 阅读(446) 评论(0) 推荐(0)