[TIL]再帰関数とツリー
さいきかんすう
再帰関数は、関数内でその関数を繰り返し呼び出す関数、すなわち、自分の関数を繰り返し呼び出す関数です.再帰関数を繰り返し呼び出す場合は、再帰呼び出しを必要とせずに解決できるbasecaseを決定する必要があります.最小の問題が確定しないと無限ループに陥るので気をつけましょう.# 1부터 입력된 값까지의 합을 구하는 재귀함수
def recursive_call(num):
if num < 1:
return num
else:
return num + recursive_call(num-1)
再帰関数を繰り返し呼び出すと、より多くのメモリが消費されるので、再帰関数は使用しないでください.しかし,数学的概念が複雑な場合,メモリの使用効率が高くなくても再帰的に問題を解決することが望ましい.
ツリー(Tree)
ツリーはノードが枝のように接続された非線形階層化資料構造である.また、ツリーには他のサブツリーがあり、サブツリーには他のサブツリーがある再帰的なデータ構造でもあります.
用語
バイナリ検索ツリー
ツリーに最大2つのサブノードがあるツリーをバイナリツリーまたはバイナリツリーと呼びます.ここで、バイナリナビゲーションツリー(BST)は、ノードを正確にソートする必要がある特定のタイプのバイナリツリーである.BSTは、単純なバイナリツリーよりも早くノードをナビゲートできるように、値サイズ条件に基づいて値を追加できるバイナリナビゲーションツリーです.
値のサイズの条件は오른쪽 서브 노드(right child)의 값 > 루트 노드(root node or parent node)의 값 > 왼쪽 서브노드(left child)의 값
です.また、重複する値を持つノードはありません.
値サイズ条件を決定する理由はBSTが左から右へ探索する構造である.これらの条件により,構造が簡単で,探索速度が単純なバイナリツリーよりも速く,ノードを挿入しやすいなどの特徴がある.# 이진 검색 트리 구현
class Node:
def __init__(self,value):
self.value = value
self.right = None
self.left = None
class bst:
def __init__(self, head):
self.head = head
def insert_node(self, value):
self.base_node = self.head
while True:
if value < self.base_node.value:
if self.base_node.left != None:
self.base_node = self.base_node.left
else:
self.base_node.left = Node(value)
break
else:
if self.base_node.right != None:
self.base_node = self.base_node.right
else:
self.base_node.right = Node(value)
break
def search_node(self, value):
self.base_node = self.head
while self.base_node:
# base node와 찾으려는 값이 일치하면 탐색을 종료함
if self.base_node.value == value:
return True
# 만약 찾으려는 값보다 base node의 값이 크면 왼쪽으로 이동해 탐색함
elif self.base_node.value > value:
self.base_node = self.base_node.left
# 만약 찾으려는 값보다 base node의 값이 크면 오른쪽으로 이동해 탐색함
elif self.base_node.value < value:
self.base_node = self.base_node.right
return False
Reference
この問題について([TIL]再帰関数とツリー), 我々は、より多くの情報をここで見つけました
https://velog.io/@woooa/TIL-재귀함수와-트리
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
# 1부터 입력된 값까지의 합을 구하는 재귀함수
def recursive_call(num):
if num < 1:
return num
else:
return num + recursive_call(num-1)
ツリーはノードが枝のように接続された非線形階層化資料構造である.また、ツリーには他のサブツリーがあり、サブツリーには他のサブツリーがある再帰的なデータ構造でもあります.
用語
バイナリ検索ツリー
ツリーに最大2つのサブノードがあるツリーをバイナリツリーまたはバイナリツリーと呼びます.ここで、バイナリナビゲーションツリー(BST)は、ノードを正確にソートする必要がある特定のタイプのバイナリツリーである.BSTは、単純なバイナリツリーよりも早くノードをナビゲートできるように、値サイズ条件に基づいて値を追加できるバイナリナビゲーションツリーです.
値のサイズの条件は
오른쪽 서브 노드(right child)의 값 > 루트 노드(root node or parent node)의 값 > 왼쪽 서브노드(left child)의 값
です.また、重複する値を持つノードはありません.値サイズ条件を決定する理由はBSTが左から右へ探索する構造である.これらの条件により,構造が簡単で,探索速度が単純なバイナリツリーよりも速く,ノードを挿入しやすいなどの特徴がある.
# 이진 검색 트리 구현
class Node:
def __init__(self,value):
self.value = value
self.right = None
self.left = None
class bst:
def __init__(self, head):
self.head = head
def insert_node(self, value):
self.base_node = self.head
while True:
if value < self.base_node.value:
if self.base_node.left != None:
self.base_node = self.base_node.left
else:
self.base_node.left = Node(value)
break
else:
if self.base_node.right != None:
self.base_node = self.base_node.right
else:
self.base_node.right = Node(value)
break
def search_node(self, value):
self.base_node = self.head
while self.base_node:
# base node와 찾으려는 값이 일치하면 탐색을 종료함
if self.base_node.value == value:
return True
# 만약 찾으려는 값보다 base node의 값이 크면 왼쪽으로 이동해 탐색함
elif self.base_node.value > value:
self.base_node = self.base_node.left
# 만약 찾으려는 값보다 base node의 값이 크면 오른쪽으로 이동해 탐색함
elif self.base_node.value < value:
self.base_node = self.base_node.right
return False
Reference
この問題について([TIL]再帰関数とツリー), 我々は、より多くの情報をここで見つけました https://velog.io/@woooa/TIL-재귀함수와-트리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol