
数据结构
ChasonPc
-
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
平衡二叉树的判断
题目:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。解析:递归,深度遍历(dfs),比较左右子树高度差是否不大于1(即小于等于1)。参考答案:/**** struct TreeNode{* int val;* TreeNode *left;* TreeNode *right;* }*/class Solution{public: bool isBalanced(TreeNode *root){原创 2020-06-01 09:08:38 · 284 阅读 · 0 评论 -
二叉树的深度(DFS)
题目:输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。解析:递归,深度遍历(dfs)。参考答案:/**** struct TreeNode{* int val;* TreeNode *left;* TreeNode *right;* };*/class Solution{public: int maxDepth(TreeNode *root){ if(root == NULL) ret原创 2020-05-31 23:50:46 · 413 阅读 · 0 评论 -
实现一个单链表
#include <iostream>#include <cstdlib>using namespace std;typedef struct node{ int data; struct node* next;}Node, *List;List createList(){ Node *head, *p1, *p2; p1 = p2 = head =...原创 2020-04-27 21:38:24 · 274 阅读 · 0 评论 -
链式队列的实现
#include <iostream>#include <cstdlib>using namespace std;typedef struct node{ int data; struct node* next;}Node;typedef struct{ Node *front; Node *rear;}Queue;//新建队列void in...原创 2020-04-27 20:45:41 · 125 阅读 · 0 评论 -
二叉树的建立和三种遍历
#include <iostream>using namespace std;typedef struct node{ int data; struct node *lchild, *rchild;}Node, *BiTree;Node* CreateNode(int i){ Node *q = new Node; q -> lchild = q ->...原创 2020-04-26 22:29:44 · 329 阅读 · 1 评论 -
反转链表I
题目: 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。解析:第一种方法:双指针法一般链表的插入,删除,反转,都可以利用双指针来求解。链表问题最重要的操作是判空,这也是面试官经常出链表问题的原因。首先进行判空操作,然后设置两个指针并设置为NULL,一个指针Pre在头结点的前面,另一个指针pNext在头结点的后面,让头结点的下一个节点指向Pre,这样就完成一次局部反转...原创 2020-04-21 16:04:22 · 248 阅读 · 0 评论 -
链表中倒数第k个结点
题目: 输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个节点。例如一个链表有6个结点,从头结点开始他们的值依次是1、 2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。解析: 为了得到第k个结点,首先想到的方法是,遍历整个链表,再回溯到倒数第3个结点即可,但是单链表只有从前往后的指针而没有从后到前的指针,因此这个思路行不通...原创 2020-04-19 09:55:17 · 127 阅读 · 0 评论 -
在O(1)时间删除链表的节点
题目: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数在O(1)的时间之内删除该节点。解析: 要在O(1)时间复杂度进行删除节点的操作,要是按常规方法来删除的话肯定不行,因为如果要删除一个节点的话,首先就要把链表遍历一遍,这样时间复杂度就会是O(n)。所以该题的解题思路是,把要删除的节点(pNode)的下一个节点(pNode->next)复制到该节点,然后把该节点(pNode-...原创 2020-04-18 15:33:47 · 213 阅读 · 0 评论 -
重构二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。...原创 2020-04-14 21:05:46 · 188 阅读 · 0 评论 -
两个栈实现一个队列
题目:用两个栈实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: int push(int node){ stack1.push(node); } int data; int pop(){ if(stack2.size() <= 0){ while(!stack1.empty()){ ...原创 2020-04-14 16:30:39 · 119 阅读 · 0 评论 -
从尾到头打印链表
题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。/*struct ListNode{ int m_data; ListNode * m_pNext};*/void printListFormTailToHead(ListNode *Head){ stack<ListNode *> nodes; ListNode* Node = Head;...原创 2020-04-14 14:55:59 · 102 阅读 · 0 评论 -
二叉排序树(BST)/二叉查找树的建立
二叉排序树又叫二叉查找树,英文名称是:Binary Sort Tree。BST的定义就不详细说了,我用一句话概括:左 < 中 < 右。 根据这个原理,我们可以推断:BST的中序遍历必定是严格递增的。下面是代码实现#include <iostream>using namespace//BST节点typedef struct node{ int data;...原创 2019-09-30 19:24:43 · 284 阅读 · 0 评论 -
二分查找(折半查找)
二分查找普通实现/** * @param srcArray 有序数组 * @param key 查找元素 * @return 不存在返回0 */ int Binary_Search(int *srcArray,int n,int key){ int low=0; int high = n-1; int mid; while(low <= high){ ...原创 2019-09-12 14:41:37 · 123 阅读 · 0 评论