전체 트리 구조가 준비되어 있습니까? 그렇다면 임의의 순회를 수행 할 수 있습니다. 예를 들어, 임의 때문에 (의사 코드)와 같은 이진 트리에서 항목을 선택할 수 있습니다 :
sub randomNode(node):
randomVal = random(0, 2)
if(randomVal == 0):
return randomNode(node.children[random(0, node.children.length)]) if node.children.length != 0 else return node;
elseif(randomVal == 1):
return node;
하 :는 n 진 트리를 들어
sub randomNode(node):
randomVal = random(0, 3); // random value between 0 and 3
if(randomVal == 0):
return randomNode(node.left) if node.left != null else return node;
elseif(randomVal == 1):
return randomNode(node.right) if node.right != null else return node;
else
return node;
을, 당신은 이런 식으로 뭔가를 할 수 parent.children[random(parent.children.count)]
은 나에게 비효율적이지 않습니다. 그것은 위의 알고리즘에서 사용한 것입니다. 마지막 질문까지, 나는 당신이 당신의 나무를 어떻게 구현 했느냐에 달려 있다고 생각합니다. 만약 당신이 스스로 나무 구조를 만들었다면 당신은 전체 나무 구조를 가져야 만합니다. 프레임 워크를 사용하는 경우 해당 프레임 워크의 구현에 따라 다릅니다.
아주 늦은 밤 입력 중 일부를 명확히하기 위해 .Children 속성은 게으른로드되지 않으며 액세스 할 때마다로드됩니다. 일반적으로 Lazy Load는 첫 번째 사용 후 속성 값 캐싱을 의미하지만 여기에는 해당되지 않습니다. –