剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192 时间限制:1秒       空间限制:32768K      参与人数:2481 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树定义 递归解法 AC代码: #include<iostream> #include<vector&…
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树:                                            10                                          /     \                                        6        14   …
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l".如果当前字符流没有存在出现一次的字符,返回#字符. 思路 和前面的那道字符串中只出现一次的字符相似而不相同,前面那道是固定长度字符串,而本题是字符流,也就是会增长的,每次字符串多一个字符,就要重新判断是哪个只出现一次的…
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树.   解题思路 平衡二叉树首先是二叉搜索树,且它每个节点的左子树和右子树高度差至多等于1:只要从根节点,依次递归判断每个节点是否满足如上条件即可:那么可以首先构造一个求任意节点树深的函数TreeDepth,然后取左右子树的深度差的绝对值,判断是否大于1:然后递归判断左子树和右子树的每个节点,如果都小于等于1的话,则为平衡二叉树 代码 class Solution: def TreeDepth(self,pRoot): if pRoot is…
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在则输出0. 思路 和之前几题数组以及字符串的解题思路非常类似,也是利用到了python的count计数方法:或者利用collection模块的Counter方法. 解答 方法一 class Solution: def MoreThanHalfNum_Solution(self, numbe…
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.#类似于二维列表[[1,2],[4,5]] 解题思路 其实这倒题和其他类似的题有所区别,这里是分层打印,把每层的节点值放在同一个列表,然后再放到一个大列表里面: 那么关键就在于怎样把每层的节点值从左到右依次取出来?有一个办法,就是把当前层的所有节点的全部子节点都存到一个列表中(这个列表每次都要更新),只要遍历这个列表,取出值就可以了 代码 class Solution: # 返回二维列表[[1,2],[4,5]] def…
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 想了很久..首先本渣渣就不太理解递归在python中的实现,其次又不知道怎么去找到最长路径,真是很费脑子,开始正题吧 首先明确二叉树每个节点都可以看作“根节点”,依次延伸下去(二叉树的递归定义),对于根节点,我要求这个节点的最大深度,那么只要求两棵左右子树的最大深度,并且max一下,然后+1就行了:然后对于左右两棵子树,也只要求它们的两棵左右子树的最大深度…
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”.是不是很简单?OK,搞定它! 思路 题目本身不难,要注意的地方有几个: 1.s可能是空字符串,但也要把它输出来 2.n大小任意,并不一定小于s的长度 3.看到一些用了python还要东搞西搞的代码,简直笑死个人,直接用字符串切片…
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student. a am I”.后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”.Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 思路 注意看清楚是怎么翻转,是把单个的单词翻转顺序,而不是把单词里面的字符串给翻转顺序.利用python的split分割函数…
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 思路 栈的压入顺序是指1,2,3,4,5是依次push到栈的,但并不是说只有push的过程,也可能有pop的操作,比如push 1,2,3,4之后,把4pop出去,然后再push5,也是…