두 갈래 나무(2)----- 중간 순서로 옮겨다니기, 귀속과 비귀속 실현
1479 단어 두 갈래 나무
typedef struct BTreeNodeElement_t_ {
void *data;
} BTreeNodeElement_t;
typedef struct BTreeNode_t_ {
BTreeNodeElement_t *m_pElemt;
struct BTreeNode_t_ *m_pLeft;
struct BTreeNode_t_ *m_pRight;
} BTreeNode_t;
2. 중간 순서 반복
정의: 우선 왼쪽 트리에 접근한 다음에 루트 노드에 접근하고 마지막으로 오른쪽 트리에 접근합니다
(1) 귀속 실현
루트 노드가 NULL이면
루트 노드가 NULL이 아닌 경우 왼쪽 트리를 먼저 액세스한 다음 루트 노드를 액세스하고 오른쪽 트리를 액세스합니다.
void InorderTraverse( BTreeNode_t *pRoot){
if( pRoot == NULL )
return ;
InorderTraverse( pRoot->m_pLeft);
Visiste( pRoot );
InorderTraverse( pRoot->m_pRight);
}
(2) 비귀속 실현
1단계: 루트 pRoot을 지정하여 pRoot이 비어 있는지 판단하고 비어 있지 않으면 2단계를 진행한다.비어 있으면 3단계로 이동합니다.
2단계: pRoot을 창고에 넣고 pRoot의 왼쪽 결점을 pRoot에 부여한 후 첫 번째 단계를 진행한다.
세 번째 단계: 창고가 비어 있는지 판단하기;비어 있으면 끝이고 비어 있지 않으면 창고 꼭대기 요소를 꺼내 pRoot에 주고 창고에서 나와 pRoot에 방문한 다음 pRoot의 오른쪽 결점을 pRoot에 부여하고 첫 번째 단계를 진행합니다.
void InorderTraverse( BTreeNode_t *pRoot){
if( pRoot == NULL )
return ;
stack < BTreeNode_t *> st;
while( pRoot != NULL || !st.empty() ){
while( pRoot != NULL ){
st.push( pRoot);
pRoot = pRoot->m_pLeft;
}
if( !st.empty() ){
pRoot = st.top();
st.pop();
Visit( pRoot );
pRoot = pRoot->m_pRight;
}
}
return;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 데이터 구조 2차원 트리의 실현 코드일.두 갈래 트리 인터페이스 2 노드 클래스 3. 두 갈래 나무 구현 이 글을 통해 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.