나는 너무 부끄럽기 때문에 고통스럽게 어리석은 질문입니다. 나는 지난 4 시간 동안 다른 알고리즘을 테스트 해 보았고, 종이로 시도해 보았지만 아직도 제대로 작동하지 못했다.예약 주문 이진 검색 나무 삽입
내가 당신에게 프로젝트 구현의 세부 사항을 아끼지하지만 기본적인 질문은 다음과 같습니다. "당신이 예약 주문 이진 트리에 삽입 노드를 처리하려면 어떻게
을 예약 주문 BST, 나는 모든 것을 의미 노드는 선행 순서 순회 (예 : 인쇄)를 사용하여 트리를 가로 지르는 방식으로 노드를 오름차순으로 인쇄해야합니다.
필요한 모든 간단한 알고리즘이 필요합니다. 간단한 삽입 알고리즘을 시도했습니다. 여기에 (stackoverflow에,하지만 그것은 잘못된 것 (또한 종이에 시도));
노드는 bas 있습니다 ically : like :
typedef struct testNode{
int key;
struct testNode *leftChild;
struct testNode *rightChild;
}NODE;
삽입 데이터는 고유 한 정수 목록 일뿐입니다. int를 키로 사용하여 노드를 만든 다음 노드를 트리에 추가해야합니다. NULL 포인터로 시작하는 루트 노드가 있습니다.
불명의 점이 있으면 죄송합니다.
도움 주셔서 감사합니다.
편집 :
가void insert(NODE **tree,int key){
if(*tree){
if ((*tree)->key >= key){
//Insert before this .....
NODE *temp = createNode(key);
temp->lc = (*tree);
(*tree) = temp;
}
else if(!(*tree)->rc){
//Right Child doesn't exist ....
insert(&(*tree)->lc,key);
}
else if((*tree)->rc->key < key){
//Right child exists and is smaller than spread ... insert left ...
insert(&(*tree)->lc,key);
}
else{
//Right child exists and is greater than spread ... insert right ...
insert(&(*tree)->rc,key);
}
//If the code as progressed to this point, insertion must have occured,
//and the code returns ......
} else {
//the **tree pointer points to NULL. Insert here ....
SPREADNODE *temp = createSpreadNode(spread);
//temp->lc = (*tree);
(*tree) = temp;
}
}
나는 그 구조체를 잘못 붙 였기를 바란다. – paddy
"사전 주문 된"이진 트리를 말하면 BST (이미 주문 됨)를 의미합니까, 아니면 선주문 순회와 관련이 있습니까? – Yaniv
네, 구조체가 급하게 입력되었으므로 편집 할 것입니다. Pre-Ordered. Pre-order traversal을 사용하여 트래버스 할 때 올바른 순서로 노드를 방문하도록 트리에 노드를 삽입해야합니다. – GCon