이 진 트 리 를 옮 겨 다 니 는 비 재 귀 알고리즘

void inorder_non_rec(btree tree)
{
        ptrtonode temp = tree;//ptrtonode          
        struct stack s;
        stack_create(&s);//       
        while (temp)
        {
PushLeftTree:
                for (;temp;temp = temp->left)
                        push(&s,temp);//        
Visit:
                if ((temp = pop(&s)) != NULL)
                {
                        visit(temp);
                }
                else return;
                
                if (temp->right)
                {
                        temp = temp->right;
                        goto PushLeftTree;
                }
                else
                        goto Visit;
        }
        stack_free(&s);
}

이 진 트 리 가 옮 겨 다 니 는 비 재 귀 알고리즘 은 스 택 을 통 해 옮 겨 다 니 기 (중간 순서 로 옮 겨 다 니 는 것 을 예 로 들 면):
1. 루트 노드 를 창고 에 넣는다
2. 뿌리 노드 의 왼쪽 하위 트 리 가 비어 있 는 지 판단 하고 비어 있 지 않 으 면 계속 창고 에 들 어가 특정한 노드 의 왼쪽 하위 트 리 가 비어 있 는 지 알 수 있 습 니 다.
3. 비어 있 으 면 스 택 상단 요 소 를 팝 업 하고 방문 후 오른쪽 하위 트 리 를 판단 하 며 비어 있 지 않 으 면 1 부터 3 까지 반복 합 니 다.
4 、 비어 있 으 면 3 반복
신인 이 갓 나 와 서 말 을 잘 못 쓰 는 것 을 양해 해 주 십시오.

좋은 웹페이지 즐겨찾기