数据结构
Niya-m
这个作者很懒,什么都没留下…
展开
-
数据结构之实现顺序表的简单操作函数
简单实现静态顺序表的基本操作:初始化,销毁,增删改查等操作。SeqList.h#ifndef _SEQLIST_H_#define _SEQLIST_H_#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#define MAX_...原创 2018-06-12 21:58:35 · 710 阅读 · 0 评论 -
【面试题】根据前序遍历和中序或中序和后序遍历树构造二叉树
根据中序遍历和后序遍历树构造二叉树 解题思路 思路和用前序遍历和后序遍历树构造二叉树类似 1、首先根据后序遍历序列的最后一个数字创建根结点(后序遍历序列的最后一个数字就是根结点) 2、然后在中序遍历序列中找到根结点所在的位置,这样就能确定左、右子树结点的数量,这样也就分别找到了左、右子树的中序遍历序列和后序遍历序列。 3、然后用递归的方法去构建左、右子树,直到叶子结点。 根据中序...原创 2018-08-20 10:38:06 · 319 阅读 · 0 评论 -
【面试题】判断一颗二叉树是不是对称的
对称二叉树符合的条件:根节点以及其左右子树 左子树的左子树和右子树的右子树相同 左子树的右子树和右子树的左子树 即判断其与其的镜像是否相同。class Solution {public: bool isSymmetrical(TreeNode* pRoot) { if(pRoot==NULL) return true; ...原创 2018-08-17 11:30:15 · 644 阅读 · 0 评论 -
【面试题】求包含n个节点(从1到n,n个节点)的所有二叉搜索树
二叉搜索树满足的条件当前根节点的值大于左子树节点的值 当前根节点的值小于右子树节点的值 左右子树同样是二叉搜索树根据上述规则可以看出,根节点值不同,形成的二叉搜索树就不同,那么[1:n]范围内的n个数就有n个不同的选择。[1:i−1]这i-1个数在其左子树上,[i+1:n]这n-i个数在其右子树上。通过[1:i−1]这i-1个数可以构成多个不同的二叉搜索树,假设是leftT...原创 2018-08-22 10:36:52 · 4969 阅读 · 0 评论 -
【面试题】给定一个二叉树,求出它的最小深度,最小深度是从根节点到最近的叶子节点的最短路径的节点数。
解题:遍历一棵二叉树,从根部看起,查看它是否有左右结点。有五种情况 1.没有根节点,那结果就是0 2.有根节点,没有左右子树,结果为1 3.没有左子树,有右子树。把右子树看成一棵新的树,用子问题求解。 4.没有右子树,有左子树。把左子树看成一棵新的树,用子问题求解 5.既有左子树,又有右子树。那就把左右子树分别都看成新的树,最后比较谁的最近叶子的路径短,就取哪边。 因为都把左右...原创 2018-08-18 13:36:44 · 3627 阅读 · 0 评论 -
【面试题】二叉树相关面试题
判断二叉树是否是平衡二叉树 可以分两步实现。第一步先遍历二叉树中的每一个结点node,调用height()求出该结点的左子树高度height(node.left) 和 右子树高度 height(node.right)。根据左右子树的高度差是否满足其绝对值不超过1,第二步看左子树和右子树是否平衡(子问题),判断该树是否为平衡二叉树。int IsBalanceTree(BTreeNode *...原创 2018-08-08 16:30:31 · 227 阅读 · 0 评论 -
【面试题】输入两个链表,找出他们的第一个公共结点
我们可以有如下步骤先得到两个链表的长度知道较长的链表比 较短的链表多几个节点先在较长的链表上走若干步两个链表上同时遍历,找到的第一个相同的结点就是他们的第一个公共结点。 例如:得到两个链表的长度分别为5和6,先让长链表走1步,到结点4。接下来同时让两个链表分别从结点1和结点4走,直至找到结点6。struct ListNode { int val; struc...原创 2018-08-01 16:41:18 · 379 阅读 · 0 评论 -
【面试题】二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建新的结点,只能调整树中结点指针的指向。 在搜索二叉树中,左子结点的值总是小于父结点的值,右子结点的值总大于父结点的值,因此我们在转换成排序双向链表时,原先指向左子结点的指针调整为链表中前一个结点的指针,原先指向右子结点的指针调整为链表中指向后一个结点指针。 我们可以中序遍历树中每一个结点。当遍历到根节点时,应将它与其左...原创 2018-08-01 15:40:27 · 1094 阅读 · 0 评论 -
数据结构之哈希表
哈希概念如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。当向该结构中:插入元素时:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放搜索元素时:对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。...原创 2018-07-28 11:47:41 · 176 阅读 · 0 评论 -
数据结构之排序
1. 冒泡排序基本思想:它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。直到没有再需要交换,也就是说该数列已经排序完成。假设有一个大小为 N 的无序序列。以升序冒泡排序为例,冒泡排序就是要每趟排序过程中通过两两比较相邻元素,将小的数字放到前面,大的数字放在后面。空间复杂度:O(N) 时间复杂度:O(N^2) 稳定排序void Swap...原创 2018-07-27 19:21:53 · 472 阅读 · 0 评论 -
数据结构之栈与队列相关面试题
实现一个栈,要求返回最小值有3种方法,分别为:用一个栈实现,偶数下标存普通数据,奇数下标为最小的值typedef struct MinStack{ int array[100];//偶数下标存普通数据,奇数下标为最小的值 int top;}MinStack;void Init(MinStack *pS){ pS->top = 0;}/...原创 2018-07-28 20:29:42 · 157 阅读 · 0 评论 -
二叉树的基本操作
完成二叉树的创建,遍历,查找,返回叶子结点等操作 Tree.htypedef char DataType;typedef struct TreeNode{ struct TreeNode *pLeft; struct TreeNode *pRight; DataType data;}TreeNode;TreeNode *CreateRoot(DataTyp...原创 2018-07-07 22:01:01 · 117 阅读 · 0 评论 -
二叉搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 算法实现1 二叉排序树的查找算法2 在二叉排序树插入结点的算法3 在二叉排序树删除结点...原创 2018-07-18 12:12:05 · 167 阅读 · 0 评论 -
数据结构之堆
实现堆的创建,出堆等操作#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#include&amp;lt;assert.h&amp;gt;#include&amp;lt;string.h&amp;gt;typedef struct Heap{ int array[100];原创 2018-07-17 20:04:42 · 157 阅读 · 0 评论 -
栈与队列的基本操作
利用顺序表实现栈 Stack.h#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>#define MAX_SIZE (100)typedef int SDataType;typedef struct Stack{ SDataType array[M...原创 2018-07-04 22:42:51 · 212 阅读 · 0 评论 -
数据结构之链表的简单操作及相关面试题
简单实现链表的基本操作:初始化,销毁,增删改查等操作。 SlistNode.h#pragma once#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#include&amp;lt;assert.h&amp;gt;#pragma warning(disable:4996)typedef int DataType;t原创 2018-06-19 20:16:38 · 164 阅读 · 0 评论 -
【面试题】二叉树的最大路径和
给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和)。最大的路径和有可能是哪些情况。第一种是左子树的路径加上当前节点第二种是右子树的路径加上当前节点第三种是左右子树的路径加上当前节点(相当于一条横跨当前节点的路径)第四种是只有自己的路径。这四种情况只是用来计算以当前节点根的最大路径。 如果当前节点上面还有...原创 2018-08-20 10:45:45 · 4507 阅读 · 0 评论