IT公司面试汇总.doc

1.题目:二叉树,各边有不同权值,求一路径,使得两点之间路径的所有边的权重之和最大,路径中边不重复,问复杂度多少? 分析:编程之美3.8有过解答,时间复杂度为O(v)。但是这里有点不同:树的边有权值。 第一种解法:最大距离的节点一定是叶子节点,首先将二叉树看成一个连通图,首先应该求根节点到所有叶节点的最大距离叶节点A,然后求A到所有其他节点的最大距离。假设要求节点A到其他节点之间的最长路径,题目的转换为求解以A为源点的最长路径。采用单源最短路径(dijkstra)的思想求解。这里要求最长路径,因此,每次选择时,应该从未知最大距离的节点集合中选择最大距离的节点加入已知最大距离的节点集合。如果采用堆结构来维护未知节点到A的最大距离,那么时间复杂度为O(vlogv)。 第二种解法:采用编程之美3.8节的递归方法,递归遍历二叉树一次,得出最大距离,时间复杂度为O(v) 2. 判断两颗二叉树是否相等,注意:相等包含两种:以下任意一种成立,root1和root2相等。 1.root1的左子树与root2的左子树相同并且root1的右子树与root2的右子树相同。 1.root1的左子树与root2的左子树相同并且root1的右子树与root2的右子树相同。 分析:按照上述两种情况写出递归即可。 view plain copy to clipboard print ? bool

文档评论(0)

1亿VIP精品文档

相关文档