U E D R , A S I H C RSS

Data Structure/Tree


1. Tree ธฐณธ ฐœ…“ค

  • Node : …ธ“œ
  • Root : งจ Œ€ธฐ …ธ“œ
  • Edge : …ธ“œ™€ …ธ“œ ด–ดŠ” „ 
  • Degree : …ธ“œ— ”ธ คžˆŠ” Edge˜ ˆ˜
  • Parent : €ชจ …ธ“œ
  • Child : ž‹ …ธ“œ
  • Level : ช‡ธต?
  • Sibling : ํ˜• œ(ฐ™€  ˆฒจ˜) …ธ“œ
  • Height : Maximum Level

2. Binary Tree

  • ž‹€ 0 - 2ฐœ
  • ™ชฝ ž‹, ˜คฅธชฝ ž‹ ตฌ„
  • Šด k˜ ตœŒ€ …ธ“œˆ˜ = 2^k - 1
  •  ˆฒจ i˜ ตœŒ€ …ธ“œˆ˜ = 2^(i-1)
  • n0„ žŽ‚ฌ€ …ธ“œ˜ ˆ˜, n2 Degree€ 2ธ …ธ“œ˜ ˆ˜ณ  ํ•˜ฉด n0 = n2 + 1 ดŠ” ณต‹ด „ฆฝํ•œ‹ค.

3. Binray Tree ˜ ํ‘œํ˜„

  • ฐฐ—ด
    • ทธƒฅ ฐจ€Œ€กœ ง‘–ด„Š”‹ค. ฃจํŠธ, ™ชฝ ž‹, ˜คฅธชฝ ž‹˜ ˆœœกœ.. „–ดžˆŠ”Œฉ‹ค.
    • ธŠค  ‘ํ• •ŒŠ”
      • Left Child : ธŠค * 2
      • Right Child : ธŠค * 2 + 1
      • Parent : ธŠค/2 -> ‚ด
  • Linked List
    • …ธ“œ—Š” ฐดํ„™€ ™ชฝ ž‹„ €ฆฌํ‚คŠ” งํฌ, ˜คฅธชฝ ž‹„ €ฆฌํ‚คŠ” งํฌกœ ตฌ„œ‹ค.

4. Binary Tree Traversal

  • PreOrder : Root -> Left Child -> Right Child : ปดํŒŒŸฌ€ €žฅ ข‹•„ํ•˜Š” ฐฉ‹

~cpp 
PreOrder(a) 
{
    if(a)
    {
        visit a
        Preorder(a->left)
        Preorder(a->right)
    }
}

  • InOrder : Left Child -> Root -> Right Child : šฐฆฌ—ฒŒ €žฅ ตˆ™ํ•œ ฐฉ‹

~cpp 
InOrder(a) 
{
    if(a)
    {
        InOrder(a->left)
        visit a
        InOrder(a->right)
    }
}

  • PostOrder : Left Child -> Right Child -> Root

~cpp 
PostOrder(a) 
{
    if(a)
    {
        PostOrder(a->left)
        PostOrder(a->right)
        visit a
    }
}

  • LevelOrder :  ˆฒจ ˆœœกœ ฐฉฌธ

~cpp 
AddQ(Root)
while(1)
{
    a = DeleteQ();
    Visit a;
    if(!a) break;
    if(a->left) AddQ(a->left)
    if(a->right) AddQ(a->right)
}

5. Binary Search Trees (šฐฆฌงกœ ด„ ํƒƒ‰ ํŠธฆฌ)

  • ฐ˜ œกœ  • ฌ˜–ด žˆŠ” ฐฐ—ด—„œ €žฅ  ฅธ ํƒƒ‰„ žž‘ํ•˜Š” •Œณ ฆฌฆ˜œกœ •Œ ค ธ žˆ‹ต‹ˆ‹ค.(งž‚˜?--;)
    • ฐ˜ ํƒƒ‰ : ฮธ(n)
    • ด„ ํƒƒ‰ : ฮธ(log2 n) - 2Š” ฐ‘ž…‹ˆ‹ค. ฒจž ํ‘œํ˜„ํ•˜Š”ฒ• •„‹œŠ”„?--;
    • nด ํ•œ 2048 •„ œ‹คณ  ํ•˜ฉด ฐ˜ ํƒƒ‰€ 2048ด ฆฌŠ” ฐ˜ฉด ด„ ํƒƒ‰€ 11ฐ–— •ˆฆฐ‹คŠ” งด ธ
    • but,  • ฌ˜–ด žˆ€ •Šœฉด ด„ ํƒƒ‰ ‚˜ฌด“  ญ“  •ˆฉ‹ˆ‹ค. •ˆ‚˜˜จ‹จ งž…‹ˆ‹ค. ค‘„— ดŠ”ฐ ฌดŠจ..--;
  • กฐ
    • Binray Search Tree ‹ˆŒ ‹—ฐํžˆ Binary Tree —ฌ• ํ•œ‹ค.
    • Keys in Left Subtree < Keys of Node
    • Keys in Right Subtree > Keys of Node(ณ กœ ˆœ„œŒ€กœ  • ฌ˜–ด žˆ–ด• ํ•œ‹จ งž…‹ˆ‹ค.)
  • •Œณ ฆฌฆ˜
    • Search x => Compare with Root
      • if x = Root's Key then ฐพ•˜œ‹ˆŒ •Œณ ฆฌฆ˜ 
      • else if x > Root's Key Root Right Subtree˜ Rootกœ …‹ํŒ…. ธฐ„œ€„€ƒ‰ ‹ค‹œ ‹œž‘
      • else if x < Root's Key Root๋ฅผ Left Subtree์˜ Root๋กœ ์…‹ํŒ…. ๊ฑฐ๊ธฐ์„œ๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ ๋‹ค์‹œ ์‹œ์ž‘

6. Insert x

  • ฃจํŠธกœ€„ฐ ํฌธฐ— งžถฐ ™ชฝ ˜Š” ˜คฅธชฝœกœ Œ•„Œ•ธฐ‹ค€ งžŠ” €„— ถ”€‹œœฉด œ‹ค.

7. Delete x(š”ธˆ ณตžกํ•จ)

  • Search x
    • งŒ•ฝ x€ leaf(งจ  …ธ“œ) - ทธƒฅ €šฐฉด ˜€ ญ..--;
    • x˜ Child€ 1ฐœ žˆ„ ฒฝšฐ - ทธ …ธ“œ €šฐณ  ทธ ž‹“ค„ ‹ค œ„กœ ˜ฌฆฐ‹ค. ณ กœ ํ• •„„€˜ ž‹ด œ‹คŠ” ฒƒด‹ค.(ญ”€ € ดƒ?--;)
    • x˜ Child€ 2ฐœ žˆ„ ฒฝšฐ - ทธ …ธ“œ˜ Left Subtree—„œ €žฅ ํฐ ฐ’„ ฐพŠ”‹ค. ดฐ’„ yณ  ํ•˜ฉด yŠ” ˜คฅธชฝ Child€ —†‹ค. y xžฆฌ— ฐ–‹ค †“ณ  —ฌธฐ„œ ‹ค‹œ
      • y€ Child —†œฉด - ทธƒฅ €šด‹ค.
      • y€ Child žˆœฉด - ทธ ฐ‘˜ …ธ“œ“ค„ ํ•œ‹จ„ œ„กœ.. ณ กœ ํ• •„„€˜ ž‹

8. Tree— € จœ —ฐ‚ฐ ช‡€€(Cross Reference ํ• •Œ ํ–ˆ˜•ฝ„ €ํ˜•‹œŒ. C++‹œกœŠ” ‚˜ค‘—-.-)

~cpp 
// ํŠธฆฌ— €ํ•œ ํ•จˆ˜“ค

void init(Node** node,char* ch)			// ดˆธฐํ™”
{
	(*node)->pLeft = (*node)->pRight = NULL;	// ™ชฝ ˜คฅธชฝ ž‹ NULLกœ
	(*node)->Data = new char[strlen(ch) + 1];	// ฌธž—ด ธธดงŒํ ํ• ‹
	strcpy((*node)->Data,ch);			// …ธ“œ— ฌธž—ด ณต‚ฌ
}

void PrintandDelete(Node* root)			// งจ ™ชฝ€„ˆœํšŒ(Preorderธ€?)
{
    if( root->pLeft )		
        Print( root->pLeft );

    cout << root->Data << endl;

    if( root->pRight )
        Print( root->pRight );

    delete root;					// ํ• ‹œ …ธ“œ  œฐ
}

int Add(Node** root,char* ch)
{
    if(!(*root))					// •„ฌดฒƒ„ —†„•Œ
    {
        *root = new Node;				// ํ• ‹
        init(root,ch);		   	         // ดˆธฐํ™”
        return 1;
    }
	
    else if(strcmp((*root)->Data,ch)>0)		// €ชจ€ ž‹ณด‹ค ํฌฉด ™ชฝ— ถ”€
	return add(&((*root)->pLeft),ch);
    else if(strcmp((*root)->Data,ch)<0)		// €ชจ€ ž‹ณด‹ค ž‘œฉด ˜คฅธชฝ— ถ”€
	return add(&((*root)->pRight),ch);
    else if(strcmp((*root)->Data,ch)==0)		// ฐ™œฉด šดํ„ฆ€
	return 1;
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:05
Processing time 0.0278 sec