| ํด๋ ์ด๋ฆ | ์ค๋ช |
|---|---|
| ch04 | ์ฐ๊ฒฐ๋ฆฌ์คํธ |
| ch05 | ํธ๋ฆฌ์ ๊ทธ๋ํ |
| ch06 | ๋ฐฐ์ด๊ณผ ๋ฌธ์์ด |
| ch07 | ์ฌ๊ท ํธ์ถ |
| ch08 | ์ ๋ ฌ |
| ch09 | ๋์์ฑ |
| ch10 | ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ |
| ch16 | ์ง์๊ธฐ๋ฐ๋ฌธ์ |
- ํธ๋ฆฌ๋ ์ฌ๊ท ํธ์ถ๊ณผ ์คํ ์๊ฐ ๋ถ์์ ๊ดํ ์ง์์ ํ ์คํธ ํ๊ธฐ์ํด ์ข์ ์๋ฃ
- 0๊ฐ ์ด์์ ๋ค๋ฅธ ๋ ธ๋์ ๋ํ ๋ ํผ๋ฐ์ค(๋๋ ํฌ์ธํฐ)๊ฐ ๋ค์ด์๋ ๋ ธ๋(๋ฐ์ดํฐ ์์)๋ก ๊ตฌ์ฑ
- ํ ๋ ธ๋๋ฅผ ์ฐธ์กฐํ๋ ๋ ธ๋๋ ํ๋๋ฟ
- ๋ ธ๋ := ๊ตฌ์กฐ์ฒด, ํด๋์ค๋ก ํํ๋๋ค
- ๋ฃจํธ : ์ต์์ ๋ ธ๋; ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผ๋ง ํ๋ ์ ์ผํ ๋ ธ๋ -> ๋ชจ๋ ํธ๋ฆฌ์ ์์์ ์ ๋ฃจํธ
public class Node{
public Node[] children; //๋
ธ๋๊ฐ ์ฐธ์กฐํ๋ ๋ชจ๋ ๋
ธ๋๋ฅผ ์ ์ฅํ ๋ฐฐ์ด
}
public class IntNode : Node {
public int value;
}
- ๋ณดํต 'ํธ๋ฆฌ'๋ผ ํ๋ฉด, ์ด์งํธ๋ฆฌ๋ผ๊ณ ์ผ์ปซ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ํ ๋ ธ๋์ ์์์ด ์ต๋ ๋๊ฐ๊น์ง ์์ ์ ์๋ค.
- ๊ทธ ๋ ์์์ ๊ฐ๊ฐ ์ผ์ชฝ ์์, ์ค๋ฅธ์ชฝ ์์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
class Node{
private:
Node left; //์ผ์ชฝ ์์
Node right; // ์ค๋ฅธ์ชฝ ์์
int value; // ๋
ธ๋์ ๊ฐ
public:
Node(Node left, Node right, int value){
this.left = left;
this.right = right;
this.value = vaule;
}
Node getLeft(){return left;}
Node getRight(){return right;}
int getValue(){return value;}
};
- ํธ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋, ํํ ์ฐ์ด๋ ์๋ฃ๊ตฌ์กฐ
- BST์์๋ ๋
ธ๋์ ์ผ์ชฝ ์์์ ๊ฐ์ด ๋ฐ๋์ ์์ ์ ๊ฐ ์ดํ์ด๊ณ , ์ค๋ฅธ์ชฝ ์์์ ๊ฐ์ ๋ฐ๋์ ์์ ์ ๊ฐ ์ด์
|์ผ์ชฝ ๋
ธ๋ |๋ | ์ค๋ฅธ์ชฝ ๋
ธ๋ |
|:-- |:-- |:-- |
| < | n| < |
-๋ฃฉ์
์ฐ์ฐ(look up)ํธ๋ฆฌ์ ์๋ ํน์ ๋
ธ๋์ ์์น๋ฅผ ์์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ณ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์์
๋ฃจํธ ๋
ธ๋์์ ์์
ํ์ฌ ๋ ธ๋๊ฐ ๋์ด ์๋ ๋์ ๋ฐ๋ณต
ํ์ฌ ๋ ธ๋์ ๊ฐ์ด ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด๋ฉด
ํ์ฌ ๋ ธ๋๋ฅผ ๋ฆฌํด
ํ์ฌ ๋ ธ๋์ ๊ฐ์ด ์ฐพ๊ณ ์ ํ๋ ๊ฐ๋ณด๋ค ์์ผ๋ฉด
์ค๋ฅธ์ชฝ ์์์ ํ์ฌ ๋ ธ๋๋ก ์ค์
ํ์ฌ ๋ ธ๋์ ๊ฐ์ด ์ฐพ๊ณ ์ ํ๋ ๊ฐ๋ณด๋ค ํฌ๋ฉด
์ผ์ชฝ ์์์ ํ์ฌ ๋ ธ๋๋ก ์ค์
๋ฐ๋ณต๋ฌธ ๋
Node findNode(Node root, int value){
while(root!=null){
int currval= root.getValue();
if(currval == value) break;
if(currval < value ){
root = root.getRight();
}
else{
root = root.getLeft();
}
}
return root;
}
