摘要: 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路1 求出左右子树的长度来判断。代码如下: 思路2 思路1先根据根结点的左右子树深度判断是否是平衡二叉树,然后根据左右子树的左右子树判断,是从上到下的过程,这一过程底层的节点会被重复遍历,影响性能。如果我们用后序遍历的方式遍历每个节点,那么 阅读全文
posted @ 2020-03-18 20:56 Flix 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路 一棵二叉树的深度是其左子树和右子树深度的最大值+1。拿左子树的深度来讲,左子树的深度等于其左右子树深度的最大值+1。递归这一过程即可,代码如下: 阅读全文
posted @ 2020-03-18 20:21 Flix 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 思路 这个题考了二叉搜索树的一个性质:二叉搜索树的中序遍历序列是递增的。所以我们中序遍历一遍二叉排序树并记录下来,然后输出第k小的节点即可。代码如下: 阅读全文
posted @ 2020-03-18 20:11 Flix 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 题目描述 统计一个数字k在排序数组中出现的次数。 思路1 直接遍历数组一遍,统计出现的次数,时间复杂度为O(logn)。代码如下: 由于二分查找的时间复杂度为O(logn),所以该算法的时间复杂度为O(logn)。 阅读全文
posted @ 2020-03-18 17:26 Flix 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 思路 由于数据结构是链表,若两个链表存在公共节点,则从该公共节点往后的节点也是公共节点。 如果两个链表长度相等,则从头开始同时遍历两个链表,两个链表第一个相同 阅读全文
posted @ 2020-03-18 16:17 Flix 阅读(166) 评论(0) 推荐(0) 编辑
摘要: ## 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). ## 思路1 遍历字符串,判断当前字符是否在当前字符之后出现过,也就是需要两个循环,时间复杂度为O(n^2)。 ## 思路2 使用哈 阅读全文
posted @ 2020-03-18 11:31 Flix 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 思路1 对每个数字都判断该数字是不是丑数,然后返回第N个丑数即可。丑数的判断方法是:如果一个数字能被2整除 阅读全文
posted @ 2020-03-18 11:09 Flix 阅读(105) 评论(0) 推荐(0) 编辑