[Data Structure] Tree
15512 ワード
木。
ノードデータ構造
ターミナルノード(leaf node):サブノードのないノードであり、「ターミナルノード」または「リーフノード」とも呼ばれる.
内部(内部)ノード:非ターミナルノード
幹線(edge):ノードを接続する線(link、branchとも呼ばれる)
兄弟(sibling):同じ親ノードを持つ
ノードサイズ(size):すべてのサブノード(自分を含む)の数
ノード深度(depth):ルートノードからノードに到達するために必要な幹線数
ノードレベル(level):ツリー内の特定の深さを持つノードのセット
ノードの次数(degree):サブツリー数/幹線数(degree)=各ノードの枝分かれ数
ツリーの回数(度of tree):ツリーの最大回数
ツリーの高さ(height):ルートノードの最も深いノードの深さ
バイナリツリー
各ノードに最大2つのサブノードを持つツリー
巡回バイナリツリー
ソースで表現しましょう
insertNode(value)-ノードをツリーに追加します.
contains(value)-ツリーにノードが存在するかどうかを返します.
class TreeNode {
constructor(value) {
this.value = value;
this.children = [];
}
insertNode(value){
this.children.push(new TreeNode(value));
//{"children": [{"children": [], "value": 5},"value": null} children에 노드를 추가
}
cotails(value){
if(this.value === value){// 첫번째 객체 안에 value확인
return true;
}else{
for(let el of this.children){
if(el.contains(value)){// 재귀로 children안쪽 값 계속 확인
return true;
}
}
}
return false;
}
insert(value)-ノードをバイナリナビゲーションツリーに追加します.
contains(value)-バイナリナビゲーションツリーにノードが存在するかどうかを返します.
inorder(callback)-中尉はバイナリナビゲーションツリーを巡視します.
class BinarySearchTreeNode {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
insert(value) {//이진 탐색 트리에 노드를 추가합니다.
if(value < this.value){//들어오는 값이 기존트리보다 작을때
if(this.left === null){// 왼쪽에 널이 나올때까
this.left = new BinarySearchTreeNode(value);
}else{
return this.left.insert(value);
}
}else if(value > this.value){//들어오는값이 기존트리보다 클때
if(this.right === null){//오른쪽에 널이 나올때까지
this.right = new BinarySerchTreeNode(value);
}else{
return this.right.insert(value);
}
}
}
cotains(value){
if(this.value === value){//첫번째객체안 value값 확인
return true;
}else if(value < this.value){//찾는 값이 현재값 보다 작은지
if(this.left === null)//값이 없는경우
return false;
}else if(this.left.contains(value)){//왼쪽 끝까지 true나올때까지 재귀
return ture;
}
}else if(value > this.value){//찾는 값이 현재값 보다 큰지
if(this.right === null){//값이 없는경우
return false;
}else if(this.right.contains(value)){//오른쪽 끝까지 true나올때까지 재귀
return true;
}
}
return false;
}
inorder(callback){
if(this.left !== null){
this.left.inorder(callback);
}
callback(this.value);
if(this.right !== null){
this.right.inorder(callback);
}
Reference
この問題について([Data Structure] Tree), 我々は、より多くの情報をここで見つけました https://velog.io/@yeonjuu417/Data-Structure-Treeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol