摘要:
7.3 给定直角坐标系上的两条线,确定这两条线会不会相交。解法:此题有很多不确定的地方:两条线的格式是什么?两条线实为同一条怎么处理?这些含糊不清的地方最好跟面试官讨论一下。下面将做出以下假设:若两条线是相同的(斜率和y轴截距相等),则认为这两条线相交;两条线若不平行则必相交。因此,要检查两条线相交... 阅读全文
摘要:
5.1 写程序使整数N中第i位到第j位的值与整数M中的相同。题目给定两个32位的数,N和M,还有两个指示位的数,i和j。 写程序使得N中第i位到第j位的值与M中的相同(即:M变成N的子串且位于N的第i位和第j位之间)例子:输入: N = 10000000000, M = 10101, i = 2, ... 阅读全文
摘要:
4.9 给定一颗二叉树,其中每个结点都含有一个数值。设计一个算法,打印结点数值总和等于某个给定值的所有路径。注意,路径不一定非得从二叉树的根节点或叶子节点开始或结束。类似于leetcode:Path Sum IIC++实现代码:(使用了双重的递归)对于不含有parent指针域时。#include#i... 阅读全文
摘要:
4.8 你有两棵非常大的二叉树:T1,有几百万个结点;T2,有几百个结点。设计一个算法,判断T2是否为T1的子树。如果T1有这么一个结点n,其子树与T2一模一样,则T2C++实现代码:#include#includeusing namespace std;//Definition for binar... 阅读全文
摘要:
4.7 设计并实现一个算法,找出二叉树中某两个结点的第一个共同祖先。不得将额外的结点储存在另外的数据结构中。注意:这不一定是二叉查找树。解答本题的关键应当是在Avoid storing additional nodes in a data structure 这句话上。我的理解是,不允许开额外的空间... 阅读全文
摘要:
4.6 设计一个算法,找出二叉查找树中指定结点的“下一个”结点(也即中序后继)。可以假定每个结点都含有指向父节点的连接。思路:有两种情况:1)如果该结点存在右子树,则中序后继即为右子树中最小的结点。 2)如果该结点不存在右子树,则后继结点为使得所给结点在其祖先结点的左子树上的第一个祖先结点... 阅读全文
摘要:
4.5 实现一个函数,检查一棵二叉树是否为二叉查找树。参考:http://blog.csdn.net/sgbfblog/article/details/7771096C++实现代码:#include#include#includeusing namespace std;struct TreeNode... 阅读全文
摘要:
4.4 给定一棵二叉树,设计一个算法,创建含有某一深度上所有结点的链表(比如,若一棵树的深度为D,则会创建D个链表)。类似于leetcode:Populating Next Right Pointers in Each Node II解答这道题目本质上是个BFS,也就是说,如果已经构建了第i层结点的... 阅读全文
摘要:
4.3 给定一个有序整数数组,元素各不相同按升序排列,编写一个算法,创建一棵高度最小的二叉查找树。解答想要使构建出来的二叉树高度最小,那么对于任意结点, 它的左子树和右子树的结点数量应该相当。比如,当我们将一个数放在根结点, 那么理想情况是,我们把数组中剩下的数对半分,一半放在根结点的左子树, 另一... 阅读全文
摘要:
4.2 给定有向图,设计一个算法,找出两个结点之间是否存在一条路径。解答根据题意,给定一个有向图和起点终点,判断从起点开始,是否存在一条路径可以到达终点。 考查的就是图的遍历,从起点开始遍历该图,如果能访问到终点, 则说明起点与终点间存在路径。稍微修改一下遍历算法即可。使用广度优先遍历实现代码:#i... 阅读全文