52.正则表达式匹配 题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和&
53.表示数值的字符串 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是&quo
54.字符流中第一个不重复的字符 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是&qu
55.链表中环的入口结点 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 解题思路 思路一,保存所有访问过的结点的地址,某个地址第二次出现的时候该结点就是环的入口结点,时间复杂度$O(n^{2})$,空间复杂度$O(n)$。 思路二,快慢指针,来自牛客网题解 。设置一个快指
56.删除链表中重复的结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解题思路 思路一,迭代。注意题目中说的是排序的链表,并且只要该元素重复出现就把
57.二叉树的下一个结点 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解题思路 要先看其右子结点是否存在,存在的话就返回其右子结点中最左边的叶子结点;右子结点不存在的话就看其是否是父结点的右子结点,不是的话
58.对称的二叉树 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 解题思路 如果根结点的左子树是右子树的镜像的话就是对称的。试了一下,牛客网上测试时空树也应该输出true。 思路一,递归。另写一个函数判断一棵树A是否是另一颗树B的镜像
59.按之字形顺序打印二叉树 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 解题思路 下面的思路来自《剑指offer》。 思路一,两个栈。第一排先入stackA,然后stackA中依次出栈的时候每个结
60.把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 解题思路 这不就层序遍历吗,So Easy !只不过要按每层来输出,普通层序遍历的话用队列即可实现,这道题要按行输出就得用两个队列。 代码 C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
61.序列化二叉树 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种