Exemplo n.º 1
0
int main(void) {

    BTreeNode *N1 = MakeBTreeNode();
    BTreeNode *N2 = MakeBTreeNode();
    BTreeNode *N3 = MakeBTreeNode();
    BTreeNode *N4 = MakeBTreeNode();
    BTreeNode *N5 = MakeBTreeNode();

    SetData(N1, 1);
    SetData(N2, 2);
    SetData(N3, 3);
    SetData(N4, 4);
    SetData(N5, 5);

    MakeLeftSubTree(N1, N2);
    MakeRightSubTree(N1, N3);
    MakeLeftSubTree(N3, N4);
    MakeRightSubTree(N3, N5);

    printf ( "1의 오른쪽의 왼쪽 : %d\n", GetData( GetLeftSubTree( GetRightSubTree( N1 ) ) ) );
    printf ( "1의 오른쪽의 오른쪽 : %d\n", GetData( GetRightSubTree( GetRightSubTree( N1 ) ) ) );

    printf ( "N1 후위순회.\n" );
    Traverse(N1);

    printf ( "\n\nN3 후위순회.\n" );
    Traverse(N3);

    
    return 0;
}
Exemplo n.º 2
0
int main()
{
	BTreeNode * bt1 = MakeBTreeNode();
	BTreeNode * bt2 = MakeBTreeNode();
	BTreeNode * bt3 = MakeBTreeNode();
	BTreeNode * bt4 = MakeBTreeNode();
	BTreeNode * bt5 = MakeBTreeNode();
	BTreeNode * bt6 = MakeBTreeNode();

	SetData(bt1, 1);
	SetData(bt2, 2);
	SetData(bt3, 3);
	SetData(bt4, 4);
	SetData(bt5, 5);
	SetData(bt6, 6);

	MakeLeftSubTree(bt1, bt2);
	MakeRightSubTree(bt1, bt3);
	MakeLeftSubTree(bt2, bt4);
	MakeRightSubTree(bt2, bt5);
	MakeRightSubTree(bt3, bt6);

	PreorderTraverse(bt1, ShowInData);
	printf("\n");
	InorderTraverse(bt1, ShowInData);
	printf("\n");
	PostorderTraverse(bt1, ShowInData);
	printf("\n");

	return 0;
}
Exemplo n.º 3
0
// 이진 탐색 트리를 대상으로 데이터 저장(노드의 생성과정 포함)
void BSTInsert(BTreeNode ** pRoot, BSTData data)
{
	BTreeNode * pNode = NULL; 
	BTreeNode * cNode = *pRoot;  
	BTreeNode * nNode = NULL;   

	while (cNode != NULL)
	{
		if (GetData(cNode) == data)
			return;

		pNode = cNode;

		if (GetData(cNode) > data)
			cNode = GetLeftSubTree(cNode);
		else
			cNode = GetRightSubTree(cNode);
	}

	nNode = MakeBTreeNode();
	SetData(nNode, data);

	if (pNode != NULL)
	{
		if (GetData(pNode) > data)
			MakeLeftSubTree(pNode, nNode);
		else
			MakeRightSubTree(pNode, nNode);
	}
	else 
	{
		*pRoot = nNode;
	}
}
void BSTInsert(BTreeNode ** pRoot, BSTData data)
{
	BTreeNode * pNode = NULL;    // parent node
	BTreeNode * cNode = *pRoot;    // current node
	BTreeNode * nNode = NULL;    // new node

	// 새로운 노드가 추가될 위치를 찾는다.
	while(cNode != NULL)
	{
		if(data == GetData(cNode))
			return;    // 키의 중복을 허용하지 않음

		pNode = cNode;

		if(GetData(cNode) > data)
			cNode = GetLeftSubTree(cNode);
		else
			cNode = GetRightSubTree(cNode);
	}
	
	// pNode의 서브 노드에 추가할 새 노드의 생성
	nNode = MakeBTreeNode();    // 새 노드의 생성
	SetData(nNode, data);    // 새 노드에 데이터 저장

	// pNode의 서브 노드에 새 노드를 추가
	if(pNode != NULL)    // 새 노드가 루트 노드가 아니라면,
	{
		if(data < GetData(pNode))
			MakeLeftSubTree(pNode, nNode);
		else
			MakeRightSubTree(pNode, nNode);
	}
	else    // 새 노드가 루트 노드라면,
	{
		*pRoot = nNode;
	}
}