
每日一题
wyn126
跑够一万公里就结婚
展开
-
二叉树的前序、中序、后序、层序遍历的递归及非递归,
二叉树的基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^(n-1)个元素。 2、深度为h的二叉树至多有2^h-1个结点。 3、满二叉树:所有终端都在同一层次,且非终端结点的度数为2。 4、在满二叉树中若其深度为h,则其所包含的结点数必为2^h-1。 5、完全二叉树:除了最大的层次即成为一颗满二叉树且层次最大那层所有的 ...原创 2018-08-06 08:37:02 · 778 阅读 · 0 评论 -
已知二叉树的中序遍历和后续遍历,进行重建二叉树
题目: Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree./** * Definition for binary tree * struct TreeN...原创 2018-08-20 09:36:25 · 700 阅读 · 0 评论 -
判断相同树
题目:Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 判断两棵树是否相同和之...原创 2018-08-20 09:48:54 · 180 阅读 · 0 评论 -
LeetCode | Unique Binary Search Trees II
题目: Given n, generate all structurally unique BST’s (binary search trees) that store values 1…n.For example, Given n = 3, your program should return all 5 unique BST’s shown below. 1 ...原创 2018-08-21 10:44:26 · 132 阅读 · 0 评论 -
字符串全排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串ABC,则打印出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CAB和CBA。 class Solution {public: vector<string> Permutation(string str) { vector<string>...原创 2018-08-24 20:36:32 · 203 阅读 · 0 评论 -
找出字符串中第一个只出现一次的字符
题目:找出字符串中第一个只出现一次的字符#include<iostream>#include<string>using namespace std;int main(){ string str; while(getline(cin,str)) { int a[128]={0};//保存出现次数 bool ...原创 2018-08-24 21:54:04 · 168 阅读 · 0 评论 -
字符串反转
题目:将 “student. a am I”转换为”I am a student”class Solution {public: string ReverseSentence(string str) { int len=str.size(); if(len==0) return str; //反转整个句子 ...原创 2018-08-25 15:39:59 · 151 阅读 · 0 评论 -
正则表达式匹配
题目描述:请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配思路分析分析:递归实现每次分别在str 和pattern中取一个字符进行匹配,如果匹...原创 2018-08-25 17:30:37 · 180 阅读 · 0 评论 -
数组中次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 解题思路 1.最先想到的,遍历数组,利用hashmap记录每个数字以及数字出现的次数。时间复杂度为O(n) 2.数组排序,然后中间值肯定是要查找的值。 排序最小的时间复杂...原创 2018-08-25 22:08:48 · 113 阅读 · 0 评论 -
把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。class Solution {public: string PrintMinNumber(vector<int> numbers) { if(numbers.e...原创 2018-08-25 22:17:13 · 127 阅读 · 0 评论 -
二叉树最大路径和 Binary Tree Max Path Sum
给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和) 样例 给出一棵二叉树: 1 / \ 2 3返回 6分析:每条最长路径都肯定会以某个顶点为跟,然后两边是以那个节点为跟到叶子节点的最长路径。代码:/** * Definition for binary tr...原创 2018-08-19 10:43:58 · 334 阅读 · 0 评论 -
二叉树最小深度问题
【问题描述】: Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.给定一个二叉树,求出它的最小深度,最小深度是从根节点到最近的...原创 2018-08-18 19:57:12 · 158 阅读 · 0 评论 -
Binary Tree Preorder Traversal((Leetcode前序遍历二叉树)
题目:Given a binary tree, return the preorder traversal of its nodes’ values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return [1,2,3].题目的意思是:先序遍历二叉树 实现代码如下:/*...原创 2018-08-18 19:08:48 · 171 阅读 · 0 评论 -
二叉树面试题
二叉树的高度题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路: 1、如果树为空,返回0 2、若果二叉树只有一个节点,返回1 3、如果二叉树中有左子树,返回左子树的高度+1 ...原创 2018-08-06 10:40:53 · 282 阅读 · 0 评论 -
链表面试题~合并两个有序的单链表
题目:输入两个链表,找出它们的第一个公共结点。 首先我们看到这个题,首先会想到的的方法是蛮力法,也就是逐个遍历链表1中的节点,再与链表2中的每一个节点进行逐一比较,显然这种办法并不是一个好办法。 两个链表都是有序的,我们可以通过遍历两个链表,分别求出两个链表的长度以及他们的长度之差,第二部遍历的时候,先让长的链表走两个链表之差步,然后两个链表同时走,走到两个链表的交点时,两个链表就会指向同...原创 2018-08-03 10:49:31 · 189 阅读 · 0 评论 -
【选择排序】和【堆排序】
选择排序假设升序 排序思想 选择排序的思想是每一趟在n-i+1个记录中选取关键字最小的记录,作为有序序列的第i个记录,并和第i个记录交换 在将要排序的区间中选择出最小的一个数字,与排序区间中的第一个数进行交换,让后依次缩小区间,直到区间只剩下一个数字为止 算法总共分为三步:选择数据->将数据放入正确的位置->缩小排序范围 如图,待排序的数组为{9,1,5,8,3...原创 2018-08-12 16:00:27 · 298 阅读 · 0 评论 -
非比较排序——归并排序
归并排序算法思路 首先让数组中的没一个数成为长度为1的有序区间,让后将相邻的长度为1的有序区间进行合并,得到最大长度为2的有序区间,接下来再把相邻有序区间进行合并,得到相邻长度为4的有序区间……最后将剩下的所有有序区间进行合并,直到让数组中的所有数合并成为一个有序区间。归并排序的实现需要开辟一个新的数组来保存合并之后的值 用图解释如下: 代码实现如下:#include&lt;io...原创 2018-08-15 09:41:42 · 295 阅读 · 0 评论 -
【直接插入排序】和【希尔排序】
直接插入排序直接插入排序的思想:选取待排序数组的第一个元素,作为一个有序区间,将后面待排序的数组看作是一个无序区间 选取有序区间的最后一个元素key与待排序区间的第一个元素进行比较,如果待排序区间的第一个元素的值小于key的值,就将有序区间的最后一个元素后移,再将key与已经有序的区间其他值进行比较,直到找到一个元素的值小于key的值,将key插入到该元素后面的位置 直接插入排序...原创 2018-08-12 21:37:43 · 295 阅读 · 0 评论 -
冒泡排序,快速排序,直接插入排序,希尔排序,简单选择排序,堆排序,冒泡排序总结
从算法的简单性来看:简单算法:冒泡排序,简单选择排序,直接插入排序改进算法:希尔排序,堆排序,归并排序,快速排序从平均情况来看:堆排序,归并排序,快速排序好于希尔排序从最好情况来来看:冒泡排序和直接插入排序更好一些,要是待排数组基本有序,不应该考虑四种复杂算法从最坏情况来看:堆排序与归并排序好于快排以及简单排序从空间复杂度来看:归并排序需要额外开辟空间,时间复杂度为O(N),快...原创 2018-08-15 11:03:25 · 1013 阅读 · 0 评论 -
二叉树的镜像问题
题目:请实现一个函数,用来判断一颗二叉树是不是对称的,如果一颗二叉树同此二叉树的镜像是相同的,定义其为对称的 思路:借助队列来实现,分别定义两个队列,将二叉树的左右子树分别入栈,其后,左子树的入队列顺序是先左子树后右子树,右子树的入队列顺序是先右子树后左子树 代码实现如下:/*struct TreeNode { int val; struct TreeNode *le...原创 2018-08-15 15:47:14 · 234 阅读 · 0 评论 -
二叉树按层序打印
题目:从上到下按层打印二叉树,同一层节点从左致右输出,每一层输出一行 代码实现://用两个队列实现按层打印树 vector<vector<int> > Print2(TreeNode* pRoot) { vector<vector<int> > res; if(pRoot==nullptr) r...原创 2018-08-15 16:49:53 · 625 阅读 · 0 评论 -
交换排序之冒泡排序&&快速排序
1.最简单排序实现 冒泡排序的思想其实很简单,它是一种简单的选择排序,在细节上有很多种优化的方法。 它的基本思想是:两两比较相邻记录的关键字,如果反序则进行交换。 首先先来看一段简单的冒泡排序://冒泡排序初级版void Bubble(int* arr, int sz){ int i, j; //从下标为0的第一个元素与后面的每一个元素进行比较 for (i = 0原创 2017-12-26 17:41:24 · 4290 阅读 · 1 评论 -
斐波那契数列的递归与非递归的实现
0,1,1,2,3,5,8…这样的数列称作斐波那契数列1、递归实现方式//斐波那契数列递归实现long long Fib1(long long n){ if (n&lt;=1) return n; else return Fib1(n - 1) + Fib1(n - 2);}递归方式实现//斐波那契数列非递归实现long long Fib2(long long n)...原创 2018-09-19 09:02:46 · 497 阅读 · 0 评论