数据结构(4): 树
4.1 根据前序与中序序列构造二叉树
问题描述:根据一棵树的前序遍历与中序遍历构造二叉树。
思路:根据二叉树的前序和中序(或后序和中序)的序列可唯一构造一棵二叉树,必须要有中序。前序遍历的第一个为根节点,找到根节点在中序中的位置,中序左边的节点都是根节点的左子树,右边的同理,然后可以用递归的方式求解。
问题描述:根据一棵树的前序遍历与中序遍历构造二叉树。
思路:根据二叉树的前序和中序(或后序和中序)的序列可唯一构造一棵二叉树,必须要有中序。前序遍历的第一个为根节点,找到根节点在中序中的位置,中序左边的节点都是根节点的左子树,右边的同理,然后可以用递归的方式求解。
问题描述:删除单向链表倒数第n个节点(只遍历一次) Input: head = [1,2,3,4,5], n = 2 Output: [1,2,3,5]
思路:两个指针,p1先走n步,然后p1和p2再一起走,当p1到链表结尾,p2就是要删除的节点。注意处理可能删除的是头结点(n=length)或者不需要删除(n>length)的情况。 可以通过增加一个虚拟的头节点,避免对头节点的特殊处理。
题目描述:给一个整数数组,找出所有出现次数大于n/3的元素。 Input: nums = [3,2,3] Output: [3]
摩尔投票法: 一般情况一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/k ⌋ 次的元素。n/k的众数最多只有k - 1个,原因:假设有k个众数,则 出现次数(⌊ n/k ⌋ +1) × \times× 众数个数 k > n。
问题:将字符的前k个字符移到字符串结尾。 Input:“abcde”,2 Output:“cdeab”
三步翻转法: 将字符串分为前k位和后(n-k)位两部分,将两部分分别翻转,最后再整体翻转即可。 时间复杂度:T = O(n) 参考原文
守护进程是一类在后台运行的特殊进程,用于执行特定的系统任务。他独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。Linux系统的大多数服务器就是通过守护进程实现的。 常见的守护进程包括: