안녕하세요 저는 이진 트리에 대한 신속한 알고리즘을 작성하고 있습니다. 내 목표는주어진 깊이에서 노드의 스위프트 이진 트리 목록
여기func listNodeAt(_n: Int) --> [T] {
}
내 나무 클래스
public class BinaryTreeNode<T:Comparable> {
//Value and children vars
public var value:T
public var leftChild:BinaryTreeNode?
public var rightChild:BinaryTreeNode?
public weak var parent:BinaryTreeNode?
//Initialization
public convenience init(value: T) {
self.init(value: value, left: nil, right: nil, parent:nil)
}
public init(value:T, left:BinaryTreeNode?, right:BinaryTreeNode?, parent:BinaryTreeNode?) {
self.value = value
self.leftChild = left
self.rightChild = right
self.parent = parent
}
}
처럼 내가 노드의 깊이를 계산하는 도우미 함수를 구축해야 특정 깊이에서 뭔가를 노드의 목록을 만드는 것입니다
//Depth
public func depth() -> Int {
guard var node = parent else {
return 0
}
var depth = 1
while let parent = node.parent {
depth = depth + 1
node = parent
}
return depth
}
어떻게하면 원하는 기능을 얻을 수 있습니까? 어떤 제안이라도 대단히 감사합니다. 감사!
그래서 트리의 깊이를 찾는 것과 동일한 알고리즘을 사용하십시오. while 루프에서 배열을 사용하면 항상 배열의 시작 부분에 부모를 삽입합니다. –
감사합니다 좀 더 자세히 설명해 주시겠습니까? 내 깊이 함수는 특정 노트의 깊이를 계산하는 것입니다. –
가능한 모든 노드 목록을 하나의 배열 또는이 깊이를 얻을 수있는 여러 배열에 나열 하시겠습니까? –