재귀 설명을 사용한 이진 트리 탐색 (파이썬)

파이 슨

저는 현재 이진 나무를 연구하고 있습니다. 트리를 순회하는 매우 효율적인 코드를 발견했습니다 (예제에서는 순회 순회입니다). 그것은 내가 이해하는 개념으로 재귀를 사용합니다. 그러나 나는 이것이 실제로 어떻게 작동하는지에 대해 내 머리를 이해할 수 없습니다. 내가 혼란스러워하는 가장 중요한 것은 start.left가 항상 같은 숫자가 아니도록 매번 목록에 올라가는 방법입니다. 누군가 이것이 실제로 나무 위로 어떻게 이동하는지 단계별로 알려주시겠습니까? 미리 감사드립니다

질문에 명확성을 추가하려면 :

  1. start가 None이 아니라면 start.left가 동일한 함수의 재귀 호출에 추가된다는 것을 이해합니다.
  2. 재귀마다 변수 순회가 함수의 반환에 할당됩니다.
  3. start가 결국 None (순회가 완료 됨)이면 함수는 순회 요소를 반환하고 프로세스를 계속합니다.

내 혼란이있는 곳은 코드가 4로 이동 한 것을 '알고'코드가 어디에 있는지 찾을 수 없다는 것입니다. 이제 반환 할 다음 요소는 2입니다. 이제 2에서 멈추고이를 반환하는 메커니즘은 어디에 있습니까? 곧?

class Node():

def __init__(self, data):
    self.data = data
    self.left = None
    self.right = None
    
    
def __str__(self):
    return str(self.data)
    

class BinaryTree(object):
def __init__(self, root):
    self.root = Node(root)          
                    
                        
def inorder_print(self, start, traversal):
    """Left -> root -> right"""
    if start:
        traversal = self.inorder_print(start.left, traversal)
        traversal += (str(start.data) + "-")
        traversal = self.inorder_print(start.right, traversal)
        

    return traversal
    
    
    
tree = BinaryTree(1)
tree.root.left = Node(2)
tree.root.right = Node(3) 
tree.root.left.left = Node(4)
tree.root.left.right = Node(5)
tree.root.right.left = Node(6)
tree.root.right.right = Node(7)
tree.root.right.right.right = Node(8)

print(tree.inorder_print(tree.root, ""))
파이 슨

좋아, 좀 더 오래 앉아서 알아 냈어. 이 질문이 답변으로 표시 될 수 있도록 생각 id가 내 생각을 게시합니다.

  1. inorder func는 루트와 빈 문자열로 호출됩니다.
  2. start의 값은 tree.root이고 start의 값은 순회 = self.inorder_print (start.left, traversal)에서 계속 반복됩니다.
  3. 재귀가 발생할 때마다 트리로 더 이동한다는 점에 유의해야합니다. start.data = 1. 재귀, start.data = 2 재귀, start.data = 4. 4는 남은 자식이 없기 때문입니다. 함수는 마침내 반환 될 수 있습니다. start.data now = 4이고 다음 줄 traveral + = str (start.data) + "-")가 실행되어 문자열에 추가됩니다. 그러나 함수는 여전히 2 개의 반복 깊이라는 것을 기억하십시오. 우리의 start.data는 2로 돌아 왔습니다. 그 함수가 실행을 마쳤을 때, 2는 line traveral + = str (start.data) + "-") / #recursion이 start.right와 함께 발생합니다. start.data now = 5 start.right에는 값이 없으므로 함수는 5를 반환 할 수 있습니다.이 프로세스는 실행 된 모든 함수가 완료 될 때까지 전체 트리에 대해 계속됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파이썬에서 재귀 대신 반복을 사용하여 이진 트리 탐색

분류에서Dev

파이썬 사전을 사용한 꼬리 재귀

분류에서Dev

트리 탐색의 재귀 이해

분류에서Dev

이진 검색 트리의 내용을 재귀 적으로 인쇄합니까?

분류에서Dev

이진 트리에서 재귀 검색

분류에서Dev

재귀 검색 이진 트리 C #

분류에서Dev

이진 검색 트리 재귀 혼란

분류에서Dev

이진 검색 트리 C ++를 사용한 폭 우선 탐색

분류에서Dev

파이썬 스크립트에 대한 재귀 검색

분류에서Dev

이진 검색 트리 재귀-setLeft와 오른쪽을 사용해야합니까?

분류에서Dev

Python에서 inorder traversal (재귀)을 사용하여 이진 검색 트리 노드 인쇄

분류에서Dev

재귀없이 inorder / pre / post /를 사용하여 이진 검색 트리를 탐색하는 방법은 무엇입니까?

분류에서Dev

셀레늄 / 파이썬을 사용한 복잡한 XPATH 탐색

분류에서Dev

재귀 함수를 사용하여 이진 검색 트리에 항목 삽입

분류에서Dev

파이썬을 사용한 n 항 트리 검색 기능

분류에서Dev

자바 스크립트 : 순회 재귀 혼동을위한 이진 검색 트리

분류에서Dev

cython을 사용하여 파이썬 목록에 대한 재귀?

분류에서Dev

파이썬에서 재귀를 사용하여 목록을 검색합니까?

분류에서Dev

재귀가있는 유효한 일반 이진 검색 트리입니다.

분류에서Dev

이진 검색 트리 (Python)에 대한 재귀 적 후속 함수

분류에서Dev

이진 검색 트리 사전 주문 순회, 재귀 대 루프?

분류에서Dev

파이썬 사전 재귀

분류에서Dev

파이썬 재귀 사실

분류에서Dev

재귀를 사용하여 파이썬에서 프랙탈 트리 그리기

분류에서Dev

재귀를 사용하는 이진 트리 균형 검사?

분류에서Dev

메모리 공간을 줄이기위한 파이썬 재귀 적 수율

분류에서Dev

os.walk없이 파이썬에서 재귀 적으로 디렉토리 구조를 탐색

분류에서Dev

자바 : 최소 이진 검색 트리 재귀 깊이

분류에서Dev

파이썬에서 세트 간의 공통성을 찾기위한 재귀

Related 관련 기사

  1. 1

    파이썬에서 재귀 대신 반복을 사용하여 이진 트리 탐색

  2. 2

    파이썬 사전을 사용한 꼬리 재귀

  3. 3

    트리 탐색의 재귀 이해

  4. 4

    이진 검색 트리의 내용을 재귀 적으로 인쇄합니까?

  5. 5

    이진 트리에서 재귀 검색

  6. 6

    재귀 검색 이진 트리 C #

  7. 7

    이진 검색 트리 재귀 혼란

  8. 8

    이진 검색 트리 C ++를 사용한 폭 우선 탐색

  9. 9

    파이썬 스크립트에 대한 재귀 검색

  10. 10

    이진 검색 트리 재귀-setLeft와 오른쪽을 사용해야합니까?

  11. 11

    Python에서 inorder traversal (재귀)을 사용하여 이진 검색 트리 노드 인쇄

  12. 12

    재귀없이 inorder / pre / post /를 사용하여 이진 검색 트리를 탐색하는 방법은 무엇입니까?

  13. 13

    셀레늄 / 파이썬을 사용한 복잡한 XPATH 탐색

  14. 14

    재귀 함수를 사용하여 이진 검색 트리에 항목 삽입

  15. 15

    파이썬을 사용한 n 항 트리 검색 기능

  16. 16

    자바 스크립트 : 순회 재귀 혼동을위한 이진 검색 트리

  17. 17

    cython을 사용하여 파이썬 목록에 대한 재귀?

  18. 18

    파이썬에서 재귀를 사용하여 목록을 검색합니까?

  19. 19

    재귀가있는 유효한 일반 이진 검색 트리입니다.

  20. 20

    이진 검색 트리 (Python)에 대한 재귀 적 후속 함수

  21. 21

    이진 검색 트리 사전 주문 순회, 재귀 대 루프?

  22. 22

    파이썬 사전 재귀

  23. 23

    파이썬 재귀 사실

  24. 24

    재귀를 사용하여 파이썬에서 프랙탈 트리 그리기

  25. 25

    재귀를 사용하는 이진 트리 균형 검사?

  26. 26

    메모리 공간을 줄이기위한 파이썬 재귀 적 수율

  27. 27

    os.walk없이 파이썬에서 재귀 적으로 디렉토리 구조를 탐색

  28. 28

    자바 : 최소 이진 검색 트리 재귀 깊이

  29. 29

    파이썬에서 세트 간의 공통성을 찾기위한 재귀

뜨겁다태그

보관