Krafton jungle
ํฌ๋ํํค ์ ๊ธ WEEK5 Day37 - Binary Tree
habbn
2024. 2. 14. 00:52
728x90
๐2024.2.13
์ค๋ Binary Tree ๊ณผ์ ๋ค ํ์๋ค......
๋ชจ๋ ๋ฌธ์ ๊ฐ ์ฌ๊ท๋ก ํธ๋ ํ์์ด๋ผ ์ ๊ทผ๋ฐฉ์์ ๋ค ๋น์ทํด์ ๊ธ๋ฐฉ ํ ์ ์์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ์คํ ํ๋ฉด์ ๋ดค๋ ๊ดํธ ๋ฌธ์ ์ฐพ์์ ๋ฐฑ์ค ๊ดํธ ๋ฌธ์ ํ๊ณ , ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ๊ธฐ์ด ํธ๋ ์ด๋ ์บ๋ฆฐ๋ ๋์ฅ ๊นจ๊ธฐ ํ๊ณ ์๋ค. ๋ด์ผ์ BST ๋ค ํ๊ณ ์ฑ ,ํค์๋ ๊ณต๋ถํด์ผ๊ฒ ๋ค!
Binary Tree
identical
๋ ๊ฐ์ ์ด์ง ํธ๋ฆฌ๊ฐ ๊ตฌ์กฐ์ ์ผ๋ก ๋์ผํ์ง ํ๋ณ
int identical(BTNode *tree1, BTNode *tree2)
{
/* add your code here */
if(tree1 == NULL && tree2 == NULL) //๋ ํธ๋ฆฌ๊ฐ ๋ชจ๋ ๋น์ด์์ผ๋ฉด ๋์ผํ๋ค๊ณ ํ๋จ
return 1;
else if(tree1 != NULL && tree2 != NULL){
return(
tree1->item == tree2->item &&
identical(tree1->left, tree2->left) &&
identical(tree1->right,tree2->right)
);
}
else
return 0;
}
maxHeight
์ฌ๊ท ์ด์ฉํด์ ์ต๋ ๋์ด ๋ํ๋
int maxHeight(BTNode *node)
{
/* add your code here */
if(node == NULL) return -1;
else
{
int l = maxHeight(node->left);
int r = maxHeight(node->right);
if(l > r) return l + 1;
else return r + 1;
}
}
countOneChildNodes
์ฌ๊ท๋ฅผ ์ด์ฉํด์ ํ์์ธ ๋ ธ๋์ ํฉ์ ๊ตฌํด๋ผ
int sumOfOddNodes(BTNode *node)
{
/* add your code here */
if(node == NULL) return 0;
else if(node->item % 2 == 1)
{
return sumOfOddNodes(node->left) + sumOfOddNodes(node->right) + node->item;
}
else
return sumOfOddNodes(node->left) + sumOfOddNodes(node->right);
}
mirrorTree
void mirrorTree(BTNode *node)
{
/* add your code here */
if(node == NULL) return;
else
{
//ํ์ฌ ๋
ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์ค์
BTNode *temp;
temp = node->left;
node->left = node->right;
node->right = temp;
mirrorTree(node->left);
mirrorTree(node->right);
}
}
printSmallerValues
void printSmallerValues(BTNode *node, int m)
{
/* add your code here */
if(node == NULL) return;
else
{
if(node->item < m)
{
printf("%d ", node->item);
}
//์ผ์ชฝ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๋ชจ๋ ํ์
printSmallerValues(node->left, m);
printSmallerValues(node->right,m);
}
}
smallestValue
int smallestValue(BTNode *node)
{
/* add your code here */
if(node == NULL) return -1;
else if(node->left == NULL && node->right == NULL)
return node->item;
else
{
int leftsmall = smallestValue(node->left);
int rightsmall = smallestValue(node->right);
if(leftsmall > rightsmall)
return rightsmall;
else
return leftsmall;
}
}
hasGreatGrandchild
int hasGreatGrandchild(BTNode *node)
{
/* add your code here */
if(node == NULL) return -1;
else
{
int l = hasGreatGrandchild(node->left);
int r = hasGreatGrandchild(node->right);
if(l + 1 > 2 || r + 1 > 2)
printf("%d ", node->item);
return ((l > r) ? l : r ) + 1;
}
}
728x90