이진 트리를 만들려고합니다. 내가받은 유일한 것은 트리의 노드 수입니다. 내 머리에 첫 번째로 들려오는 것은 전체 노드 수를 추적하기 위해 인덱스 (BFS order)를 사용하고 재귀 적 정의를 사용하는 것입니다. 여기에 내 의사 코드가 있습니다.고정 크기의 이진 트리 만들기
N = 10 //binary tree total node count
i = 0 //global integer
function()
if i > N
return True
create node i
i = i + 1
function(i) //left
i = i + 1
function(i) //right
나는 나를 어쩌면 내가 재귀 규칙을 위반하고 같은 느낌이 정의에 전역 변수를 사용해야합니다. 내가하는 일을하는 더 좋은 방법이 있을까요? 이것이 방법 일 텐데, 개선 될 수 있습니까?
참고 : 나는 코드가 아니라 이론적 인 방법에 대해 묻습니다.
편집 :이 메서드는 실패했습니다. 나는 제안을 위해 열려 있습니다.
명확화 :이 트리에 대한 요구 사항은 이전 심도가 노드로 채워지지 않은 경우 (모든 노드에 2 개의 자식이 있음), 이전에이를 언급하지 않은 것을 용서해주십시오. 내가 언급 한 스택은 질문과는 아무런 상관이 없습니다. 나무를 반복적으로 통과하는 일반적인 방법 일뿐입니다. 재귀 적으로 정의 된 경우
이 질문은 재귀 적으로 트리를 생성해야한다고 말하지는 않습니다. 어쩌면 당신이 그 질문을 오해했을 수도 있습니다. 생성 된 트리에 관해서는 왼쪽 자식 만 생성되기 때문에 기본적으로 연결된 목록입니다. 'i'에 관해서는 : 코드가 정확하지 않지만, 이미 글로벌 변수가없는 솔루션의 절반 정도입니다. 매개 변수없이'function'을 정의했지만 매개 변수로'i'와 함께 사용하십시오 ... – Paul
@Paul 저는 학습 목적으로 재귀를 사용하기로했습니다. 그러나 iterative 메소드는 또한 appliable이며, 프로그램에서 스택을 정의해야합니다. – Rockybilly
실제로 원하는 것을 분명히해야합니다. 특히 : 나무에 대한 요구 사항은 무엇입니까? 트리가'N + 1' 노드를 포함한다는 사실을 제외하고는 알고리즘이 완벽하게 훌륭한 트리를 생성합니다. 그리고이 질문은 스택과 관련이 있습니까? – Paul