标签:
1.设计包含min函数的栈[数据结构]
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
2.子数组的最大和[算法]
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。
3.元树中和为某一值的所有路径[数据结构]
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数22和如下二元树
10
5 12
4 7
则打印出两条路径:10, 12和10, 5, 7。
class Program { static void Main(string[] args) { Node root = new Node() { Value = 10 }; root.Left = new Node() { Value = 5 }; root.Right = new Node() { Value = 12 }; root.Left.Left = new Node() { Value = 4 }; root.Left.Right = new Node() { Value = 7 }; PrintPath(root, 22, new Stack<int>(), 0); } static void PrintPath(Node node, int expectedSum, Stack<int> pathNums, int currentSum) { if (node == null) { return; } pathNums.Push(node.Value); currentSum = currentSum + node.Value; if (node.Left == null && node.Right == null) { if (currentSum == expectedSum) { foreach (var item in pathNums) { Console.WriteLine(item); } } } PrintPath(node.Left, expectedSum, pathNums, currentSum); PrintPath(node.Right, expectedSum, pathNums, currentSum); pathNums.Pop(); currentSum = currentSum - node.Value; } } }
4.二元查找树的后序遍历结果[数据结构]
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
6 10
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
标签:
原文地址:http://www.cnblogs.com/leonhart/p/4678628.html