Ruby CTCI 4.3:给定一个二叉树,设计一个算法,在每个深度创建所有节点的链表
我正在用Ruby解决这个问题,我使用了一个改进的DFS算法。其思想是,每次DFS必须查看相邻节点时,它都会查看子节点,因此这是一个新级别,记录在下面的哈希中 这个实施/思考过程正确吗?请注意,对于我来说,在不为输入创建不同的二叉树的情况下,检查自己的实现的有效方法是什么Ruby CTCI 4.3:给定一个二叉树,设计一个算法,在每个深度创建所有节点的链表,ruby,algorithm,data-structures,linked-list,graph-algorithm,Ruby,Algorithm,Data Structures,Linked List,Graph Algorithm,我正在用Ruby解决这个问题,我使用了一个改进的DFS算法。其思想是,每次DFS必须查看相邻节点时,它都会查看子节点,因此这是一个新级别,记录在下面的哈希中 这个实施/思考过程正确吗?请注意,对于我来说,在不为输入创建不同的二叉树的情况下,检查自己的实现的有效方法是什么 #Given a binary tree, design an algorithm which creates a linked list of all the nodes at each depth. #(e.g if you
#Given a binary tree, design an algorithm which creates a linked list of all the nodes at each depth.
#(e.g if you have a tree with depth D, you'll have D linked lists).
#Space: O(N)
#Time: O(N)
def linked_list_hash(head)
level_hash = {}
level_hash[1] = LinkedList.new(head)
dfs(head, level_hash)
level_hash
end
def dfs(node, level_hash)
new_level = level_hash.keys.last+1
level_hash[new_level] = LinkedList.new
adj(node).each do |child|
level_hash[new_level].insert(child)
dfs(child, level_hash)
end
end
private
def adj(node)
[node.left, node.right]
end
一个问题:
dfs
每次调用时都会创建一个新的level\u散列[new\u level]
。但它会为每个节点调用一次,因此每次找到新节点时,都会覆盖列表。不确定是否还有其他问题,但这个问题突然出现了
你的思维过程似乎还可以。我会考虑做一个BFS而不是一个DFS来解决这样的问题,因为你试图按深度分组。不过,基于DFS的方法肯定有效
要检查您的代码,您可以先对代码进行推理,然后将其隐藏起来,这样会捕获很多错误。否则,用实际输入测试代码是无法替代的。我在采访中被要求做很多这样的事情。在测试时,您希望确保获得代码的良好覆盖率;试着沿着所有不同的代码路径走下去。并尝试找到要测试的特殊情况(在这种情况下,如果您传入一个空树,或者传入一个根没有子树的树,该怎么办?)