[TIL] 21-08-10
アルゴリズム研究22枚のみバイナリ検索ツリーO 白駿13325バイナリツリーO Baekjun 2963無限バイナリツリーナビゲーション~ 満北12章から最適化問題決定問題復習 Baekjun 17179カットケーキ~ Baekjun 2343その他チュートリアルO 百駿17951が翻った答案用紙に私の採点を感じ、O 白駿1300 K 2番目の数字O アルゴリズム研究
白駿13325バイナリツリー https://velog.io/@sunjoo9912/%EB%B0%B1%EC%A4%80-13325-%EC%9D%B4%EC%A7%84-%ED%8A%B8%EB%A6%AC 璻伯駿2963無限バイナリツリー探索 https://velog.io/@sunjoo9912/%EB%B0%B1%EC%A4%80-2963-%EB%AC%B4%ED%95%9C-%EC%9D%B4%EC%A7%84-%ED%8A%B8%EB%A6%AC-%ED%83%90%EC%83%89 ➖
燒伯俊17179ケーキを切る https://velog.io/@sunjoo9912/%EB%B0%B1%EC%A4%80-17179-%EC%BC%80%EC%9D%B4%ED%81%AC-%EC%9E%90%EB%A5%B4%EA%B8%B0 白駿2343ギターレッスン https://velog.io/@sunjoo9912/%EB%B0%B1%EC%A4%80-2343-%EA%B8%B0%ED%83%80-%EB%A0%88%EC%8A%A8 白俊17951の答案用紙で私の採点を感じた. https://velog.io/@sunjoo9912/%EB%B0%B1%EC%A4%80-17951-%ED%9D%A9%EB%82%A0%EB%A6%AC%EB%8A%94-%EC%8B%9C%ED%97%98%EC%A7%80-%EC%86%8D%EC%97%90%EC%84%9C-%EB%82%B4-%ED%8F%89%EC%A0%90%EC%9D%B4-%EB%8A%90%EA%BB%B4%EC%A7%84%EA%B1%B0%EC%95%BC 燒白準1300 K第一手 https://velog.io/@sunjoo9912/%EB%B0%B1%EC%A4%80-1300-K%EB%B2%88%EC%A7%B8-%EC%88%98 📌参考資料バイナリ・ナビゲーション・ツリー-操作のナビゲート、挿入、削除
https://yjg-lab.tistory.com/139 ナビゲーション演算与えられたキー値==ルートノードのキー値:ナビゲート成功
与えられたキー値<ルートノードのキー値:左側のサブツリーに移動
与えられたキー値>ルートノードのキー値:右側のサブツリー をナビゲートバイナリツリーにデータを挿入するにはナビゲーション演算が必要 挿入するデータへのナビゲートに成功しました:ツリーにすでに存在するデータ.挿入できません
挿入するデータのナビゲーションに失敗しました:ナビゲーションに失敗した場所は挿入する場所になります 削除するノードが端末ノードである場合:
ターミナルノードの親を見つけて接続を解除 削除するノードがサブツリーが1つしかない場合:
->ノードを削除し、親ノード(削除先)にサブツリーを貼り付けます 削除するノードにサブツリーが2つある場合:
->削除するノードの値に最も近いノード(次のノードまたは前のノード)を削除するノードの場所 にインポートします.
白駿13325バイナリツリー
燒伯俊17179ケーキを切る
https://yjg-lab.tistory.com/139
与えられたキー値<ルートノードのキー値:左側のサブツリーに移動
与えられたキー値>ルートノードのキー値:右側のサブツリー
TreeNode *search(TreeNode *node, int key)
{
if ( node == NULL ) return NULL;
if ( key == node->key ) return node;
else if ( key < node->key )
return search(node->left, key);
else
return search(node->right, key);
}
そうにゅうえんざん挿入するデータのナビゲーションに失敗しました:ナビゲーションに失敗した場所は挿入する場所になります
TreeNode * new_node(int item) {
TreeNode * temp = (TreeNode *)malloc(sizeof(TreeNode));
temp->key = item;
temp->left = temp->right = NULL;
return temp;
}
TreeNode * insert_node(TreeNode * node, int key){
//탐색 실패한 경우 삽입할 데이터를 가진 새로운 노드 추가
if (node == NULL) return new_node(key);
if (key < node->key)
node->left = insert_node(node->left, key);
else if (key > node->key)
node->right = insert_node(node->right, key);
//변경된 노드의 포인터 반환
return node;
}
アクションの削除ターミナルノードの親を見つけて接続を解除
->ノードを削除し、親ノード(削除先)にサブツリーを貼り付けます
->削除するノードの値に最も近いノード(次のノードまたは前のノード)を削除するノードの場所
TreeNode * min_value_node(TreeNode * node)
{
TreeNode * current = node;
// 최솟값을 가진 노드 = 맨 왼쪽 단말 노드
while (current->left != NULL)
current = current->left;
return current;
}
// key 노드 삭제 후 루트 반환
TreeNode * delete_node(TreeNode * root, int key) {
if (root == NULL) return root;
// 키가 루트보다 작으면 왼쪽 서브 트리에 있음
if (key < root->key)
root->left = delete_node(root->left, key);
// 키가 루트보다 크면 오른쪽 서브 트리에 있음
else if (key > root->key)
root->right = delete_node(root->right, key);
// 키가 루트와 같으면 이 노드를 삭제함
else {
//삭제할 노드가 오른쪽 서브트리만 가지고 있는 경우
//혹은 삭제할 노드가 단말 노드인 경우
if (root->left == NULL) {
TreeNode * temp = root->right;
free(root);
return temp;
}
//삭제할 노드가 왼쪽 서브트리만 가지고 있는 경우
//혹은 삭제할 노드가 단말 노드인 경우
else if (root->right == NULL) {
TreeNode * temp = root->left;
free(root);
return temp;
}
// 삭제할 노드가 두 개의 서브트리를 가지고 있는 경우
// 삭제할 노드의 우측 서브트리에서의 최솟값 = 삭제할 노드의 직후 노드
TreeNode * temp = min_value_node(root->right);
root->key = temp->key;
root->right = delete_node(root->right, temp->key);
}
return root;
}
Reference
この問題について([TIL] 21-08-10), 我々は、より多くの情報をここで見つけました https://velog.io/@sunjoo9912/TIL-21-08-10テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol