BST의 재귀 대 반복 순회

나빈 쿠마르

N 노드의 이진 트리를 재귀 적으로 탐색하면 실행 스택에서 N 공간을 차지합니다. iteration을 사용하면 명시 적 스택에서 N 개의 공백을 사용해야합니다.

질문은 재귀 순회가 반복적 순회가 사용하는 O(N)것처럼 공간 복잡성을 사용한다고 말하는 것 입니까? 메모리 제한으로 인해 나를 제한하는 일부 플랫폼에서 순회 코드를 실행하는 것과 관련하여 이야기하고 있습니다. 또한 나는 반복을 직접 구현하는 것에 대해 이야기하고 있지 않습니다 (접근법 중 하나가 괜찮다고 말할 수 있음) KthSmallestElement().BST를 통해 일종의 순회를 사용하는 BST에서 알고리즘을 구현 하고 있습니다.

내 코드가 공간 제한에서 실패하지 않도록 공간 복잡성 측면에서 반복적 접근 방식 또는 재귀 적 접근 방식을 사용해야합니까?

명확하게 말하면 :

다음은 내가 구현 한 것입니다.

int Solution::kthsmallest(TreeNode* root, int k) {
    stack<TreeNode *> S;
    while(1)
    {
        while(root)
        {
            S.push(root);
            root=root->left;
        }

        root=S.top();
        S.pop();

        k--;
        if(k==0)
            return root->val;

        root=root->right;
    }
}

내 친구가 구현 한 내용은 다음과 같습니다.

class Solution {
    public:
        int find(TreeNode* root, int &k) {
            if (!root) return -1;
            // We do an inorder traversal here. 
            int k1 = find(root->left, k);
            if (k == 0) return k1; // left subtree has k or more elements.
            k--; 
            if (k == 0) return root->val; // root is the kth element.
            return find(root->right, k); // answer lies in the right node.
        }

        int kthsmallest(TreeNode* root, int k) {
           return find(root, k); // Call another function to pass k by reference.
        }
};

그래서 둘 중 어느 것이 더 낫고 어떻게?

로렌조 가티

메모리 사용에 관심이 있다면 트리가 균형을 이루도록해야합니다 . 즉, 깊이가 노드 수보다 작은 지 확인해야합니다 . N 노드가있는 완벽하게 균형 잡힌 이진 트리는 깊이 log 2 N (반올림)을 습니다.

바이너리 트리의 모든 노드를 방문하는 데 필요한 메모리는 잘못 생각하는 노드 수가 아니라 트리의 깊이에 비례하기 때문에 중요합니다. 재귀 또는 반복 프로그램은 이전에 방문한 다른 노드가 아니라 루트에서 현재 노드까지의 경로를 "기억"해야합니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자바의 트리 순회 : 반복적 또는 재귀 적?

분류에서Dev

반환에 대한 BST 조회 재귀 함수 혼란

분류에서Dev

BST의 순회

분류에서Dev

반복 스타일에서 재귀없이 BTree를 순서대로 순회하는 방법은 무엇입니까?

분류에서Dev

BST 및 순회 순회에서 반복 삭제

분류에서Dev

3도 트리의 재귀 및 비 재귀 순회

분류에서Dev

재귀 순열 함수의 복잡성

분류에서Dev

Java에서 BST의 재귀 적 순서 순회를 이해하는 방법은 무엇입니까?

분류에서Dev

R의 재귀 ARIMA 회귀

분류에서Dev

재귀를 반복으로 대체

분류에서Dev

반복에 대한 다중 재귀

분류에서Dev

반복에 대한 재귀 (Java)

분류에서Dev

반복에 대한 C ++ 재귀 코드

분류에서Dev

이진 검색 트리의 재귀 순서 순회

분류에서Dev

2 개의 인수를 사용하는 반복에 대한 재귀 공식

분류에서Dev

이 재귀 함수의 반복 버전

분류에서Dev

PHP에서 다차원 배열의 재귀 순회

분류에서Dev

모든 BST 순회가 순서대로 값을 반환하는 이유는 무엇입니까?

분류에서Dev

복합 패턴에 대한 재귀 반복기

분류에서Dev

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

분류에서Dev

재귀 SQL / 중복 제거 열의 대안

분류에서Dev

재귀 적 순열 프린터의 시간 복잡성

분류에서Dev

$ a [i] = b [i] * c [i] $ 유형의 for 루프를 대체하기위한 만족스러운 반복기 재귀

분류에서Dev

SELECT의 반복 INSERT를 재귀 또는 함수로 대체하여 Postgres에서 경로를 탐색합니다.

분류에서Dev

부울 재귀의 대안

분류에서Dev

R의 여러 회귀 모델 및 데이터 하위 집합에 대한 반복

분류에서Dev

음 이항 회귀의 상호 작용에 대한 단순 기울기

분류에서Dev

OpenMesh 재귀 반복

분류에서Dev

F # 재귀 대 반복 속도 / 오버 헤드

Related 관련 기사

  1. 1

    자바의 트리 순회 : 반복적 또는 재귀 적?

  2. 2

    반환에 대한 BST 조회 재귀 함수 혼란

  3. 3

    BST의 순회

  4. 4

    반복 스타일에서 재귀없이 BTree를 순서대로 순회하는 방법은 무엇입니까?

  5. 5

    BST 및 순회 순회에서 반복 삭제

  6. 6

    3도 트리의 재귀 및 비 재귀 순회

  7. 7

    재귀 순열 함수의 복잡성

  8. 8

    Java에서 BST의 재귀 적 순서 순회를 이해하는 방법은 무엇입니까?

  9. 9

    R의 재귀 ARIMA 회귀

  10. 10

    재귀를 반복으로 대체

  11. 11

    반복에 대한 다중 재귀

  12. 12

    반복에 대한 재귀 (Java)

  13. 13

    반복에 대한 C ++ 재귀 코드

  14. 14

    이진 검색 트리의 재귀 순서 순회

  15. 15

    2 개의 인수를 사용하는 반복에 대한 재귀 공식

  16. 16

    이 재귀 함수의 반복 버전

  17. 17

    PHP에서 다차원 배열의 재귀 순회

  18. 18

    모든 BST 순회가 순서대로 값을 반환하는 이유는 무엇입니까?

  19. 19

    복합 패턴에 대한 재귀 반복기

  20. 20

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

  21. 21

    재귀 SQL / 중복 제거 열의 대안

  22. 22

    재귀 적 순열 프린터의 시간 복잡성

  23. 23

    $ a [i] = b [i] * c [i] $ 유형의 for 루프를 대체하기위한 만족스러운 반복기 재귀

  24. 24

    SELECT의 반복 INSERT를 재귀 또는 함수로 대체하여 Postgres에서 경로를 탐색합니다.

  25. 25

    부울 재귀의 대안

  26. 26

    R의 여러 회귀 모델 및 데이터 하위 집합에 대한 반복

  27. 27

    음 이항 회귀의 상호 작용에 대한 단순 기울기

  28. 28

    OpenMesh 재귀 반복

  29. 29

    F # 재귀 대 반복 속도 / 오버 헤드

뜨겁다태그

보관