각 재귀는 고정 : I는 n 차 나무 각 재귀 내 자신을 쓰기에 문제가있어 수정 편집루비 - n 차 나무
얘들 아,
를 참조하십시오. @element
은 노드의 값이고 @children
은 연결된 모든 하위 노드의 배열입니다. 이것은 내 방법입니다 :
def each
yield(@element)
@children.each { |x|
x.each { |i| yield i}
}
self
end
문제는 하위 요소를 반복한다는 것입니다. 예를 들어, 이것을 사용하여 값이 o이고 자식이 c 인 노드를 인쇄하면 'oc'대신 'occ'이 인쇄됩니다. 나는 정말로 무슨 일이 일어나고 있는지 모르기 때문에, 시도한 모든 수정은 효과가 없다. 어떤 아이디어?
EDIT : 노드 값에 항복하는 것 외에도 각각 노드 값을 호출하기 때문에 이것이 가능할 수 있다고 생각합니다. 따라서 한 문자의 문자열 일 경우 .each
호출로 문자를 다시 생성합니다.
편집 편집 : 모두를 읽어 주셔서 감사합니다. 그러나 나는 엉망이되었습니다. 문제는이 방법이 아니라 동일한 클래스의 또 다른 문제에서 발생했습니다. to_s는 올바르게 인쇄되지만 문자열 인 경우 상위 노드의 값을 변경합니다. 내가 테스트 할 때마다, 나는 항상 처음에는 to_s를 사용했고, 심지어 그것을 깨닫지도 못했습니다. 이렇게되어 미안합니다. (나는 내 자신의 질문에 답할 수 없다. 나는 초보자이기 때문에).
class Tree
def initialize element, children = []
@element, @children = element, children
end
def each &pr
pr.call(@element)
@children.each{|x| x.each(&pr)}
self
end
end
a = Tree.new('self')
b = Tree.new('parent', [a])
c = Tree.new('grandparent', [b])
c.each{|x| puts x}
# => grandparent
# => parent
# => self
b.each{|x| puts x}
# => parent
# => self
한 통지가 당신이 반복적으로 PROC 객체를 전달하려는 것 때문에, 당신은 더 나은 가야한다는 것입니다 : 당신의 응답에서 판단
이 클래스는 어떤 클래스에 정의됩니까? 코드를 클래스 본문으로 묶어야합니다. – sawa
또한'@ element'와'@ children '이 n-ary 트리의 인스턴스에 정의되는 방법을 설명해야합니다. – sawa
이것이 문제 영역이라고 생각해서 클래스가 생략되었습니다. 나는 더 이상 모르겠다. @element와 @children은 모두 생성자에 전달되고, @element는 어떤 객체로, @children은 배열로 전달된다. – Nathan