JPH05120339A - 二分木構造データ登録処理方法 - Google Patents

二分木構造データ登録処理方法

Info

Publication number
JPH05120339A
JPH05120339A JP3149857A JP14985791A JPH05120339A JP H05120339 A JPH05120339 A JP H05120339A JP 3149857 A JP3149857 A JP 3149857A JP 14985791 A JP14985791 A JP 14985791A JP H05120339 A JPH05120339 A JP H05120339A
Authority
JP
Japan
Prior art keywords
pointer
subtree
balance
comparison data
tree structure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP3149857A
Other languages
English (en)
Inventor
Yuji Fujiwara
雄治 藤原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC IC Microcomputer Systems Co Ltd
Original Assignee
NEC IC Microcomputer Systems Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC IC Microcomputer Systems Co Ltd filed Critical NEC IC Microcomputer Systems Co Ltd
Priority to JP3149857A priority Critical patent/JPH05120339A/ja
Publication of JPH05120339A publication Critical patent/JPH05120339A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】 データの入力順序に依存せずに左右部分木の
階層数を常に均等な状態に保つことを目的とする。 【構成】 二分木構造のデータ登録処理方法において、
各登録要素は自要素より下位の左右部分木階層数の差の
値を有し、二分木構造に要素を登録する際に各要素の有
する左右部分木階層数の差の値が「+2」または「−
2」になると、左部分木階層均等工程および右部分木階
層均等工程でその要素より下位の左右部分木が均等な状
態でないと判断して左右部分木階層数が均等になるよう
に要素の構造の組み替えを行うことを特徴とする。 【効果】 データ登録および参照の処理速度を速くする
効果がある。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、リスト構造中の二分木
構造に関する。本発明はデータベースの運用に実施して
効果がある。
【0002】
【従来の技術】従来の技術を図面を参照して説明する。
ただし、上位階層の要素の比較データに対して下位階層
の要素の比較データが小さい要素は左部分木を構成し、
大きいかまたは等しい要素は右部分木を構成するものと
する。
【0003】図2(a)は要素の構成である。各要素は
比較データ500の格納領域、左部分木要素へのポイン
タ501の格納領域および右部分木要素へのポインタ5
02の格納領域からなる。
【0004】図2(b)は従来の二分木構造生成関数に
おけるフローチャートである。二分木構造生成関数は引
数として上位階層の要素から下位階層の要素を指すポイ
ンタを受け取り、登録判定工程S510で上位階層の要
素のポインタが要素なし指標(以下、要素なし指標をN
ULLという)であるか否かを判断し、NULLであれ
ば登録要素領域確保工程S511で登録要素の領域を確
保し、確保した領域のアドレスを上位階層要素のポイン
タ領域にセットする。さらに、登録要素格納工程S51
2で比較データ500の格納領域に登録比較データをセ
ットし、左部分木要素へのポインタ501の格納領域お
よび右部分木要素へのポインタ502の格納領域にNU
LLをセットする。登録判定工程S510で上位階層要
素のポインタがNULLでなければ、左部分木右部分木
判定工程S513で登録する比較データと現在の階層に
ある要素の比較データとで大小を判断する。登録する比
較データが小さい場合は、左部分木走査工程S514で
二分木構造生成関数の再帰呼び出しを行い、引数として
左部分木要素へのポインタ501を引き渡す。登録する
比較データが大きいまたは等しい場合は、右部分木走査
工程S515で二分木構造生成関数の再帰呼び出しを行
い、引数として右部分木要素へのポインタ502を引き
渡す。この処理の繰り返しにより二分木構造を生成して
いくので、登録データの入力順序によって左部分木の階
層だけが深くなったり右部分木の階層だけが深くなった
りして一方向に偏り、末端部分要素の参照および登録に
時間がかかる。
【0005】図12と図13とでバランスのよい二分木
構造と一方向に偏った二分木構造とを具体例を上げて比
較する。
【0006】図12にバランスのよい二分木構造を説明
する。登録する比較データの入力順序が70、50、9
0、40、60、80、100である場合に、要素52
0、要素521、要素522、要素523、要素52
4、要素525、要素526の順に各要素が左右バラン
スよく登録される。このときに末端要素の階層は3階層
であり、要素520から要素526までの二分木構造生
成関数の呼び出し回数の合計は17回である。
【0007】図13に一方向に偏った二分木構造を説明
する。登録する比較データの入力順序が100、90、
80、40、50、60、70である場合に、要素53
0、要素531、要素532、要素533、要素53
4、要素535、要素536の順に一方向に偏って登録
される。このときに末端要素の階層は7階層になり、要
素530から要素536までの二分木構造生成関数の呼
び出し回数の合計は28回でバランスのよい二分木構造
と比較して11回多いことになる。
【0008】
【発明が解決しようとする課題】従来、この種の二分木
構造は比較データの大小比較だけを問題とし登録するの
で、左部分木の階層だけが深かったりまたは右部分木の
階層だけが深かったりして一方向に偏るときに、末端部
分要素の参照または登録に時間を要する欠点が発生す
る。
【0009】本発明は、このような欠点を除去するもの
で、データの入力順序に係わらず左右部分木の階層数を
均等な状態に保つ二分木構造データ登録処理方法を提供
することを目的とする。
【0010】
【課題を解決するための手段】本発明は、比較データを
格納する領域および左右部分木要素へのそれぞれのポイ
ンタを格納する領域を有する要素のそれぞれを、この要
素の比較データとこの要素の1階層上にある要素の比較
データとの間の大小関係に基づきリスト構造中の二分木
構造に登録する第一処理を実行する二分木構造データ登
録処理方法において、上記要素のそれぞれは、さらに、
自要素より下位側の左部分木階層数と右部分木階層数と
の差の値を登録する領域を有し、上記第一処理の実行に
先行して、各要素の有する上記差の値が「+2」または
「−2」となるときにその要素より下位側の左右部分木
の階層数が均等でないと判断する第二処理およびこの第
二処理に引き続いて左右部分木の階層数を均等に保つべ
く上記ポインタの入れ替えを行う第三処理を実行するこ
とを特徴とする。
【0011】ここで、上記第三処理は、上記差の値が
「+2」または「−2」になった要素を第一要素、この
第一要素の1階層上にある要素を第二要素、上記第一要
素から階層数の多い方向の部分木の1階層下にある要素
を第三要素、この第三要素から上記第一要素がこの第三
要素を指す部分木の方向と反対方向の1階層下にある要
素を第四要素、この第四要素から上記第三要素がこの第
四要素を指す部分木の方向と反対方向の1階層下にある
要素を第五要素、上記第四要素から上記第三要素が上記
第四要素を指す部分木の方向と同じ方向の1階層下にあ
る要素を第六要素と名付けた場合に、上記第三要素の有
する左右部分木階層数の差の値が表す階層数の多い部分
木の方向が上記第一要素の有する左右部分木階層数の差
の値と同じ方向である場合または均等な場合に、上記第
一要素の上記第三要素を指すポインタを上記第二要素の
上記第一要素を指すポインタに、上記第三要素の上記第
四要素を指すポインタを上記第一要素の上記第三要素を
指すポインタに、上記第二要素の上記第一要素を指すポ
インタを上記第三要素の上記第四要素を指すポインタに
それぞれ入れ替え、一方、上記第三要素の有する左右部
分木階層数の差の値が表す階層数の多い部分木の方向が
上記第一要素の有する左右部分木階層数の差の値と反対
方向である場合または均等な場合に、上記第三要素の第
四要素を指すポインタを上記第二要素の第一要素を指す
ポインタに、上記第四要素の上記第五要素を指すポイン
タを上記第三要素の上記第四要素を指すポインタに、上
記第一要素の上記第三要素を指すポインタを上記第四要
素の上記第五要素を指すポインタに、上記第四要素の上
記第六要素を指すポインタを上記第一要素の上記第三要
素を指すポインタに、上記第2要素の上記第一要素を指
すポインタを上記第四要素の上記第六要素を指すポイン
タにそれぞれ入れ替えて実行する処理であることが望ま
しい。
【0012】
【作用】登録される各要素の有する左右部分木階層数の
差の値が「+2」または「−2」になると、その要素よ
り下位の左右部分木が均等な状態でないと判断し、左部
分木階層均等工程および右部分木階層均等工程で左右部
分木階層数が均等になるように要素の構造の組み替えを
ポインタの付け替えを行って実行する。この後に、二分
木構造に要素を登録する。
【0013】
【実施例】以下、本発明の一実施例をフローチャートお
よび二分木構造の構成図を参照して説明する。図1
(a)は本発明を実現するための要素の構成である。各
要素は、比較データ100の格納領域、左右部分木階層
数の差の値101の格納領域、左部分木要素へのポイン
タ102の格納領域および右部分木要素へのポインタ1
03の格納領域からなる。以後、左右部分木階層数の差
の値101をBALANCE、左部分木要素へのポイン
タ102をLEFT、右部分木要素へのポインタ103
をRIGHTと表す。また、この実施例では上位階層の
要素の比較データに対して下位階層の要素の比較データ
が小さい要素は左部分木を構成し、大きいまたは等しい
要素は右部分木を構成するものとする。
【0014】図3を用いてBALANCEの変動につい
て説明する。BALANCEの「0」は左右部分木階層
数が均等であることを表し、プラス値かマイナス値かに
より左右どちらかの部分木階層数が多いかを表す。本実
施例では、プラス値は右部分木階層数が多いことを表
し、マイナス値は左部分木階層数が多いことを表す。図
3の二分木構造を構成している要素110、要素11
1、要素112のBALANCEは左右部分木階層数が
同じであるので「0」である。同じ構成を持つ要素11
3、要素114、要素115に新しく要素116を登録
すると、要素115は左部分木の階層数が右部分木に対
して「1」多くなるため「−1」になり、要素113は
右部分木の階層数が左部分木に対して「1」多くなるた
め「+1」になる。
【0015】図4にBALANCEが要素組み替えの必
要な状態になる場合について説明する。BALANCE
が要素組み替えの状態を表すのは、その要素以下の階層
数が均等でない状態であり、「−2」または「+2」に
なったときである。図4に示す要素122のBALAN
CEは右部分木の階層数が左部分木より2階層多いこと
を表す「+2」になっており、要素122、要素12
3、要素124に対して要素組み替えを行う。要素12
0のBALANCEが「+2」に変動しないのは、要素
122以下の要素組み替えを行うことにより均等な状態
に戻り、結果的に変動する必要がなくなるためである。
要素122以下の要素組み替えを行った結果として、要
素125から要素129のバランスのよい二分木構造に
なる。
【0016】次に、二分木構造の要素組み替えに関係す
る各要素に名称を振り付け、図5に各要素の名称を左右
部分木合わせて示す。部分木の末端に新しく登録された
要素を要素X(130、136)、要素Xの1階層上に
ある要素を要素Y(131、137)、BALANCE
が「−2」または「+2」になった要素を要素A(13
2、138)、要素Aの1階層上にある要素を要素B
(133、139)、要素Aから階層数の多い方向の部
分木の1階層下にある要素を要素C(134、14
0)、要素Cから要素Aが要素Cを指す部分木の方向と
反対方向の1階層下にある要素を要素D(135、14
1)とする。以降、この要素名を用いて説明する。
【0017】図1(b)、図6、図7は本発明を実現す
るためのフローチャートである。図1(b)は二分木構
造生成関数におけるフローチャート、図6は右部分木階
層均等処理を行うフローチャート、図7は左部分木階層
均等処理を行うフローチャートである。
【0018】最初に、図1(b)の二分木構造生成関数
におけるフローチャートについて説明する。二分木構造
生成関数は引数として上位階層の要素から下位階層の要
素を指すポインタを受け取り、登録判定工程S200で
上位階層の要素のポインタがNULLか否かを判断し、
NULLであれば登録要素領域確保工程201で登録要
素の領域を確保し、確保した領域のアドレスを上位階層
要素のポインタ領域にセットする。さらに、登録要素格
納工程S202で比較データ100の格納領域に登録比
較データをセットし、左部分木要素へのポインタ102
の格納領域および右部分木要素へのポインタ領域103
の格納領域にNULLをセットする。ここで、BALA
NCE101の格納領域に初期値をセットしなければな
らないが、この要素は末端要素(要素X)であり、下位
部分木は存在しないので「0」をセットする。部分木階
層均等用変数初期化工程S203で2つのフラグに値を
セットする。1つはNESTフラグに「0」をセットす
る。NESTフラグが「1」となるのは図4で示す要素
Yが要素Xを指す反対の部分木に要素が存在していない
場合である。すなわち、新しく要素を登録した部分木の
階層が深くなったことを表している。2つはENDフラ
グに「1」をセットする。ENDフラグはNESTフラ
グを「1」にするか否かを判定するために部分木走査の
上で現在の要素が要素Yであるか認識するためのフラグ
である。ENDフラグが「1」のときに要素Yであるこ
とを認識するので、要素Xの位置で「1」をセットし、
要素Yの位置で「0」をセットすることにある。登録判
定工程S200で上位階層要素のポインタがNULLで
なければ、左部分木右部分木判定工程S204で登録す
る比較データと現在の階層にある要素の比較データとで
大小を判断する。登録する比較データが小さい場合に、
左部分木走査工程S205で二分木構造生成関数の再帰
呼び出しを行い、引数として左部分木要素へのポインタ
102を引き渡す。二分木構造生成関数の再帰呼び出し
から戻ると左部分木階層均等工程S206で部分木が均
等であるか判断し、均等でなければ要素の組み替えを行
う。左部分木階層均等工程S206については図7のフ
ローチャートで詳しく説明する。左部分木右部分木判定
工程S204で登録する比較データが大きいまたは等し
い場合は、右部分木走査工程S207で二分木構造生成
関数の再帰呼び出しを行い、引数として右部分木要素へ
のポインタ103を引き渡す。二分木構造生成関数の再
帰呼び出しから戻ると右部分木階層均等工程S208で
部分木が均等であるか判断し、均等でなければ要素の組
み替えを行う。左部分木階層均等工程S208について
は図6のフローチャートで詳しく説明する。
【0019】図6に右部分木階層均等処理を行うフロー
チャートについて説明する。最初に、現階層の要素位置
が要素Yの位置か識別するためENDフラグが「1」か
否か判定(S210)し、「1」であればさらに要素Y
のLEFTがNULLか否かを判定(S211)する。
NULLでなければ要素YのBALANCEに「0」を
セット(S212)し、ENDフラグに0をセット(S
215)して右部分木階層均等処理を終了する。要素Y
のLEFTがNULLか否かの判定(S211)でNU
LLならば部分木の階層が深くなったと識別できるの
で、NESTフラグに「1」をセット(S213)し、
要素YのBALANCEを1加算(S214)し、EN
Dフラグに「0」をセット(S215)して右部分木階
層均等処理を終了する。ENDフラグが「1」か否かの
判定(S210)で「1」でなければ、さらにNEST
フラグが「1」か否かの判定(S216)を行う。
「1」でなければ右部分木階層均等処理を終了する。
「1」ならば部分木の階層が深くなっているので現階層
の要素のBALANCEを1加算(S217)し、その
BALANCEが「1」より大きいか否かを判定(S2
18)する。「1」以下であれば右部分木階層均等処理
を終了する。「1」より大きいならば要素Bの要素Aを
指すポインタを一時的にTMP変数に保存(S219)
し、要素CのBALANCEが「0」より小さいか否か
を判定(S220)する。要素CのBALANCEが
「0」以上ならば要素Bの要素Aを指すポインタに要素
AのRIGHTをセット(S221)し、要素AのRI
GHTに要素CのLEFTをセット(S222)し、要
素CのLEFTにTMPに保存していたポインタをセッ
ト(S223)し、この3つのポインタの組み替えによ
り左右部分木が均等な状態になるので、要素AのBAL
ANCEに「0」をセット(S224)し、要素CのB
ALANCEに「0」をセット(S225)して右部分
木階層均等処理を終了する。
【0020】要素CのBALANCEが「0」より小さ
いか否かの判定(S220)で「0」より小さいならば
要素Bの要素Aを指すポインタに要素CのLEFTをセ
ット(S226)し、要素CのLEFTに要素DのRI
GHTをセット(S227)し、要素DのRIGHTに
要素AのRIGHTをセット(S228)し、要素Aの
RIGHTに要素DのLEFTをセット(S229)
し、要素DのLEFTにTMPに保存していたポインタ
をセット(S230)し、この5つのポインタの組み替
えにより左右部分木が均等な状態になるので、要素A、
要素B、要素CのBALANCEを再セットする処理を
行う。
【0021】BALANCEの再セットは要素DのBA
LANCEの状態により3通りある。要素DのBALA
NCEが「0」か否かを判定(S231)し、「0」な
らば要素AのBALANCEに「0」をセット(S23
2)し、要素CのBALANCEに「0」をセット(S
233)するBALANCEの再セット処理を行う。要
素DのBALANCEが「0」でなければ、要素DのB
ALANCEが「0」より大きいか否かを判定(S23
4)し、「0」より大きいならば要素AのBALANC
Eに「−1」をセット(S235)し、要素CのBAL
ANCEに「0」をセット(S236)し、要素DのB
ALANCEに「0」をセット(S239)するBAL
ANCEの再セット処理を行う。要素DのBALANC
Eが「0」より小さければ、要素AのBALANCEに
「0」をセット(S237)し、要素CのBALANC
Eに「+1」をセット(S238)し、要素DのBAL
ANCEに「0」をセット(S239)するBALAN
CEの再セット処理を行う。BALANCEの再セット
処理が終了すると、NESTフラグに「0」をセット
(S240)して右部分木階層均等処理を終了する。
【0022】図7に左部分木階層均等処理を行うフロー
チャートについて説明する。最初に、現階層の要素位置
が要素Yの位置か否かを識別するためENDフラグが
「1」か否か判定(S250)し、「1」であればさら
に要素YのRIGHTがNULLか否かを判定(S25
1)する。NULLでなければ要素YのBALANCE
に「0」をセット(S252)し、ENDフラグに
「0」をセット(S255)して左部分木階層均等処理
を終了する。要素YのRIGHTがNULLか否かの判
定(S251)でNULLならば部分木の階層が深くな
ったと識別できるので、NESTフラグに「1」をセッ
ト(S253)し、要素YのBALANCEを1減算
(S254)し、ENDフラグに「0」をセット(S2
55)して左部分木階層均等処理を終了する。ENDフ
ラグが「1」か否かの判定(S250)で「1」でなけ
れば、さらにNESTフラグが「1」か否かの判定(S
256)を行う。「1」でなければ左部分木階層均等処
理を終了する。「1」ならば部分木の階層が深くなって
いるので、現階層の要素のBALANCEを1減算(S
257)し、そのBALANCEが「−1」より小さい
か否かを判定(S258)する。「−1」以上であれば
左部分木階層均等処理を終了する。「1」より大きいな
らば要素Bの要素Aを指すポインタを一時的にTMP変
数に保存(S259)し、要素CのBALANCEが
「0」より大きいか否かを判定(S260)する。要素
CのBALANCEが「0」以下ならば要素Bの要素A
を指すポインタに要素AのLEFTをセット(S26
1)し、要素AのLEFTに要素CのRIGHTをセッ
ト(S262)し、要素CのRIGHTにTMPに保存
していたポインタをセット(S263)し、この3つの
ポインタの組み替えにより左右部分木が均等な状態にな
るので、要素AのBALANCEに「0」をセット(S
264)し、要素CのBALANCEに「0」をセット
(S265)して左部分木階層均等処理を終了する。
【0023】要素CのBALANCEが「0」より小さ
いか否かの判定(S260)で「0」より大きいなら
ば、要素Bの要素Aを指すポインタに要素CのRIGH
Tをセット(S266)し、要素CのRIGHTに要素
DのLEFTをセット(S267)し、要素DのLEF
Tに要素AのLEFTをセット(S268)し、要素A
のLEFTに要素DのRIGHTをセット(S269)
し、要素DのRIGHTにTMPに保存していたポイン
タをセット(S270)し、この5つのポインタの組み
替えにより左右部分木が均等な状態になるので、要素
A、要素B、要素CのBALANCEを再セットする処
理を行う。
【0024】BALANCEの再セットは要素DのBA
LANCEの状態により3通りある。要素DのBALA
NCEが「0」か否かを判定(S271)し、「0」な
らば要素AのBALANCEに「0」をセット(S27
2)し、要素CのBALANCEに「0」をセット(S
273)するBALANCEの再セット処理を行う。要
素DのBALANCEが「0」でなければ、要素DのB
ALANCEが「0」より小さいか否かを判定(S27
4)し、「0」より小さいならば要素AのBALANC
Eに「+1」をセット(S275)し、要素CのBAL
ANCEに「0」をセット(S276)し、要素DのB
ALANCEに「0」をセット(S279)するBAL
ANCEの再セット処理を行う。要素DのBALANC
Eが「0」より大きければ、要素AのBALANCEに
「0」をセット(S277)し、要素CのBALANC
Eに「−1」をセット(S278)し、要素DのBAL
ANCEに「0」をセット(S279)するBALAN
CEの再セット処理を行う。BALANCEの再セット
処理が終了すると、NESTフラグに「0」をセット
(S280)して右部分木階層均等処理を終了する。こ
れにより左右部分木の階層数を常に均等な状態に保つこ
とができる。
【0025】図8から図11は本発明における要素組み
替え例である。図8は要素CのBALANCEが「0」
以上のパターンである。ここで、300は要素A位置の
要素を指すポインタ(要素B位置の要素が持つポイン
タ)、301は比較データ20かつBALANCE「+
2」の要素(要素A位置の要素)、302は比較データ
10かつBALANCE「0」の要素、303は比較デ
ータ40かつBALANCE「+1」の要素(要素C位
置の要素)、304は比較データ30かつBALANC
E「0」の要素(要素D位置の要素)、305は比較デ
ータ50かつBALANCE「+1」の要素、306は
比較データ60かつBALANCE「0」の要素、30
7は要素C位置の要素を指すポインタ(要素B位置の要
素が持つポインタ)、308は比較データ20かつBA
LANCE「0」の要素(要素A位置の要素)、309
は比較データ10かつBALANCE「0」の要素、3
10は比較データ40かつBALANCE「0」の要素
(要素C位置の要素)、311は比較データ30かつB
ALANCE「0」の要素(要素D位置の要素)、31
2は比較データ50かつBALANCE「+1」の要
素、313は比較データ60かつBALANCE「0」
の要素、314は要素A位置の要素を指すポインタ(要
素B位置の要素が持つポインタ)、315は比較データ
10かつBALANCE「+2」の要素(要素A位置の
要素)、316は比較データ10かつBALANCE
「+1」の要素(要素C位置の要素)、317は比較デ
ータ30かつBALANCE「0」の要素、318は要
素C位置の要素を指すポインタ(要素B位置の要素が持
つポインタ)、319は比較データ10かつBALAN
CE「0」の要素(要素A位置の要素)、320は比較
データ20かつBALANCE「0」の要素(要素C位
置の要素)、321は比較データ30かつBALANC
E「0」の要素である。
【0026】(a)は組み替えを行うポインタが全て要
素を抱える場合である。要素300〜要素306の二分
木構造は要素301の有するBALANCEが「+2」
となりさらに要素303の有するBALANCEが「+
1」であるので、図6のフローチャートに示すS221
〜S223のポインタの組み替え処理が行われる。S2
21の処理により要素307のポインタは要素310を
指すようになる。S222の処理により要素308のR
IGHTは要素311を指すようになる。S223の処
理により要素310のLEFTは要素308を指すよう
になる。要素の組み替えが終了すると、図6のフローチ
ャートに示すS224、S225のBALANCEの再
セット処理が行われる。S224の処理により「+2」
だった要素308のBALANCEが「0」になる。S
225の処理により「+1」だった要素310のBAL
ANCEが「0」になる。結果として、要素307〜要
素313の構成になる。
【0027】(b)は組み替えを行うポインタが一部の
要素を抱えていない場合である。すなわち、(a)の単
純な場合である。要素314〜要素317の二分木構造
の部分木階層均等処理は全て(a)と同一の処理が行わ
れるが、要素316のLEFTがNULLであるために
NULLポインタの移動になり、要素316のLEFT
にあるNULLは要素315のRIGHTにセットされ
る。結果として、要素318〜要素321の構成にな
る。
【0028】図9は要素CのBALANCEが「−1」
かつ要素DのBALANCEが「+1」のパターンであ
る。ここで、322は要素A位置の要素を指すポインタ
(要素B位置の要素が持つポインタ)、323は比較デ
ータ30かつBALANCE「+2」の要素(要素A位
置の要素)、324は比較データ20かつBALANC
E「−1」の要素、325は比較データ80かつBAL
ANCE「−1」の要素(要素C位置の要素)、326
は比較データ10かつBALANCE「0」の要素、3
27は比較データ50かつBALANCE「+1」の要
素(要素D位置の要素)、328は比較データ90かつ
BALANCE「+1」の要素、329は比較データ4
0かつBALANCE「0」の要素、330は比較デー
タ60かつBALANCE「+1」の要素、331は比
較データ100かつBALANCE「0」の要素、33
2は比較データ70かつBALANCE「0」の要素、
333は要素D位置の要素を指すポインタ(要素B位置
の要素が持つポインタ)、334は比較データ30かつ
BALANCE「−1」の要素(要素A位置の要素)、
335は比較データ20かつBALANCE「−1」の
要素、336は比較データ80かつBALANCE
「0」の要素(要素C位置の要素)、337は比較デー
タ10かつBALANCE「0」の要素、338は比較
データ50かつBALANCE「0」の要素(要素D位
置の要素)、339は比較データ90かつBALANC
E「+1」の要素、340は比較データ40かつBAL
ANCE「0」の要素、341は比較データ60かつB
ALANCE「+1」の要素、342は比較データ10
0かつBALANCE「0」の要素、343は比較デー
タ70かつBALANCE「0」の要素、344は要素
A位置の要素を指すポインタ(要素B位置の要素が持つ
ポインタ)、345は比較データ20かつBALANC
E「+2」の要素(要素A位置の要素)、346は比較
データ10かつBALANCE「0」の要素、347は
比較データ50かつBALANCE「−1」の要素(要
素C位置の要素)、348は比較データ30かつBAL
ANCE「+1」の要素(要素D位置の要素)、349
は比較データ60かつBALANCE「0」の要素、3
50は比較データ40かつBALANCE「0」の要
素、351は要素D位置の要素を指すポインタ(要素B
位置の要素が持つポインタ)、352は比較データ20
かつBALANCE「−1」の要素(要素A位置の要
素)、353は比較データ10かつBALANCE
「0」の要素、354は比較データ50かつBALAN
CE「0」の要素(要素C位置の要素)、355は比較
データ30かつBALANCE「0」の要素(要素D位
置の要素)、356は比較データ60かつBALANC
E「0」の要素、357は比較データ40かつBALA
NCE「0」の要素である。
【0029】(a)は組み替えを行うポインタが全て要
素を抱える場合である。要素322〜要素332の二分
木構造は要素323の有するBALANCEが「+2」
となりさらに要素325の有するBALANCEが「−
1」であるので、図6のフローチャートに示すS226
〜S230のポインタの組み替え処理が行われる。S2
26の処理により要素337のポインタは要素338を
指すようになる。S227の処理により要素336のL
EFTは要素341を指すようになる。S228の処理
により要素338のRIGHTは要素336を指すよう
になる。S229の処理により要素334のRIGHT
は要素340を指すようになる。S230の処理により
要素338のLEFTは要素334を指すようになる。
要素の組み替えが終了するとBALANCEの再セット
を行うが要素327の有するBALANCEが「+1」
であるので、図6のフローチャートに示すS235、S
236、S239の処理が行われる。S235の処理に
より「+2」だった要素334のBALANCEが「−
1」になる。S236の処理により「−1」だった要素
336のBALANCEが「0」になる。239の処理
により「+1」だった要素338のBALANCEが
「0」になる。結果として、要素333〜要素343の
構成になる。
【0030】(b)は組み替えを行うポインタが一部の
要素を抱えていない場合である。すなわち、(a)の単
純な場合である。要素344〜要素350の二分木構造
の部分木階層均等処理は全て(a)と同一の処理が行わ
れるが、要素348のLEFTがNULLであるために
NULLポインタの移動になり、要素348のLEFT
にあるNULLは要素345のRIGHTにセットされ
る。結果として、要素351〜要素357の構成にな
る。
【0031】図10は要素CのBALANCEが「−
1」かつ要素DのBALANCEが「−1」のパターン
である。ここで、358は要素A位置の要素を指すポイ
ンタ(要素B位置の要素が持つポインタ)、359は比
較データ30かつBALANCE「+2」の要素(要素
A位置の要素)、360は比較データ20かつBALA
NCE「−1」の要素、361は比較データ80かつB
ALANCE「−1」の要素(要素C位置の要素)、3
62は比較データ10かつBALANCE「0」の要
素、363は比較データ60かつBALANCE「−
1」の要素(要素D位置の要素)、364は比較データ
90かつBALANCE「+1」の要素、365は比較
データ50かつBALANCE「−1」の要素、366
は比較データ70かつBALANCE「0」の要素、3
67は比較データ100かつBALANCE「0」の要
素、368は比較データ40かつBALANCE「0」
の要素、369は要素D位置の要素を指すポインタ(要
素B位置の要素が持つポインタ)、370は比較データ
30かつBALANCE「0」の要素(要素A位置の要
素)、371は比較データ20かつBALANCE「−
1」の要素、372は比較データ80かつBALANC
E「+1」の要素(要素C位置の要素)、373は比較
データ10かつBALANCE「0」の要素、374は
比較データ60かつBALANCE「0」の要素(要素
D位置の要素)、375は比較データ90かつBALA
NCE「+1」の要素、376は比較データ50かつB
ALANCE「−1」の要素、377は比較データ70
かつBALANCE「0」の要素、378は比較データ
100かつBALANCE「0」の要素、379は比較
データ40かつBALANCE「0」の要素、380は
要素A位置の要素を指すポインタ(要素B位置の要素が
持つポインタ)、381は比較データ20かつBALA
NCE「+2」の要素(要素A位置の要素)、382は
比較データ10かつBALANCE「0」の要素、38
3は比較データ50かつBALANCE「−1」の要素
(要素C位置の要素)、384は比較データ40かつB
ALANCE「−1」の要素(要素D位置の要素)、3
85は比較データ60かつBALANCE「0」の要
素、386は比較データ30かつBALANCE「0」
の要素、387は要素D位置の要素を指すポインタ(要
素B位置の要素が持つポインタ)、388は比較データ
20かつBALANCE「0」の要素(要素A位置の要
素)、389は比較データ10かつBALANCE
「0」の要素、390は比較データ50かつBALAN
CE「+1」の要素(要素C位置の要素)、391は比
較データ40かつBALANCE「0」の要素(要素D
位置の要素)、392は比較データ60かつBALAN
CE「0」の要素、393は比較データ30かつBAL
ANCE「0」の要素である。
【0032】(a)は組み替えを行うポインタが全て要
素を抱える場合である。要素358〜要素368の二分
木構造の要素組み替え処理は図9の(a)と全て同じで
ある。しかし、BALANCEの再セット処理で要素3
63の有するBALANCEが「−1」であるので、図
6のフローチャートに示すS237、S238およびS
239のBALANCE再セット処理が行われる。S2
37の処理により「+2」だった要素370のBALA
NCEが「0」になる。S238の処理により「−1」
だった要素372のBALANCEが「+1」になる。
S239の処理により「−1」だった要素374のBA
LANCEが「0」になる。結果として、要素369〜
要素393の構成になる。
【0033】(b)は組み替えを行うポインタが一部の
要素を抱えていない場合である。すなわち、(a)の単
純な場合である。要素380〜要素386の二分木構造
の部分木階層均等処理は全て(a)と同一の処理が行わ
れるが、要素384のRIGHTがNULLであるため
にNULLポインタの移動になり、要素384のRIG
HTにあるNULLは要素383のLEFTにセットさ
れる。結果として、要素387〜要素393の構成にな
る。
【0034】図11は要素CのBALANCEが「−
1」かつ要素DのBALANCEが「0」のパターンで
ある。
【0035】ここで、394は要素A位置の要素を指す
ポインタ(要素B位置の要素が持つポインタ)、395
は比較データ10かつBALANCE「+2」の要素
(要素A位置の要素)、396は比較データ30かつB
ALANCE「−1」の要素(要素C位置の要素)、3
97は比較データ20かつBALANCE「0」の要素
(要素D位置の要素)、398は要素D位置の要素を指
すポインタ(要素B位置の要素が持つポインタ)、39
9は比較データ10かつBALANCE「0」の要素
(要素A位置の要素)、400は比較データ30かつB
ALANCE「0」の要素(要素C位置の要素)、40
1は比較データ20かつBALANCE「0」の要素
(要素D位置の要素)である。要素394〜要素397
の二分木構造の要素組み替え処理は図9および図10に
全て同じである。しかし、BALANCEの再セット処
理で、要素397の有するBALANCEが「0」であ
るので、図6のフローチャートに示すS232およびS
233のBALANCE再セット処理が行われる。S2
32の処理により「+2」だった要素399のBALA
NCEが「0」になる。S233の処理により「−1」
だった要素400のBALANCEが「0」になる。結
果として、要素398〜要素401の構成になる。
【0036】
【発明の効果】本発明は、以上説明したように、二分木
構造の左右部分木の階層数をバランスのよい状態に常に
構成していくので、一方向に偏るようなデータの入力順
序である場合に比べ登録および参照が速く行える効果が
ある。
【図面の簡単な説明】
【図1】(a)は本発明実施例で用いられる要素の構成
を示す図、(b)は本発明実施例での処理内容を示すフ
ローチャート。
【図2】(a)は従来例で用いられる要素の構成を示す
図、(b)は従来例の処理内容を示すフローチャート。
【図3】本発明実施例でのBALLANCEの変動を示
す図。
【図4】本発明実施例での要素組み替え時のBALLA
NCEを示す図。
【図5】要素組み替えに関係する各要素に割り付けた要
素の名称。
【図6】本発明実施例で右部分木階層均等処理を示すフ
ローチャート。
【図7】本発明実施例で左部分木階層均等処理を示すフ
ローチャート。
【図8】本発明実施例のデータ登録処理による部分木階
層均等化の具体例。
【図9】本発明実施例のデータ登録処理による部分木階
層均等化の具体例。
【図10】本発明実施例のデータ登録処理による部分木
階層均等化の具体例。
【図11】本発明実施例のデータ登録処理による部分木
階層均等化の具体例。
【図12】従来例によるバランスの良い二分木構造の具
体例。
【図13】従来例による一方向に偏った二分木構造の具
体例。
【符号の説明】
100 比較データ 101 左右部分木階層数の差の値(BALANCE) 102 左部分木要素へのポインタ(LEFT) 103 右部分木要素へのポインタ(RIGHT) 500 比較データ 501 左部分木要素へのポインタ 502 右部分木要素へのポインタ
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成4年10月7日
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】図面の簡単な説明
【補正方法】変更
【補正内容】
【図面の簡単な説明】
【図1】(a)は本発明実施例で用いられる要素の構成
を示す図、(b)は本発明実施例での処理内容を示すフ
ローチャート。
【図2】(a)は従来例で用いられる要素の構成を示す
図、(b)は従来例の処理内容を示すフローチャート。
【図3】本発明実施例でのBALLANCEの変動を示
す図。
【図4】本発明実施例での要素組み替え時のBALLA
NCEを示す図。
【図5】要素組み替えに関係する各要素に割り付けた要
素の名称。
【図6】本発明実施例で右部分木階層均等処理を示すフ
ローチャート。
【図7】本発明実施例で左部分木階層均等処理を示すフ
ローチャート。
【図8】本発明実施例のデータ登録処理による部分木階
層均等化の具体例。
【図9】本発明実施例のデータ登録処理による部分木階
層均等化の具体例。
【図10】本発明実施例のデータ登録処理による部分木
階層均等化の具体例。
【図11】本発明実施例のデータ登録処理による部分木
階層均等化の具体例。
【図12】本発明実施例のデータ登録処理による部分木
階層均等化の具体例。
【図13】本発明実施例のデータ登録処理による部分木
階層均等化の具体例。
【図14】本発明実施例のデータ登録処理による部分木
階層均等化の具体例。
【図15】従来例によるバランスの良い二分木構造の具
体例。
【図16】従来例による一方向に偏った二分木構造の具
体例。
【手続補正2】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正内容】
【図2】
【図1】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図14】
【図11】
【図13】
【図12】
【図15】
【図16】

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 比較データを格納する領域および左右部
    分木要素へのそれぞれのポインタを格納する領域を有す
    る要素のそれぞれを、この要素の比較データとこの要素
    の1階層上にある要素の比較データとの間の大小関係に
    基づきリスト構造中の二分木構造に登録する第一処理を
    実行する二分木構造データ登録処理方法において、 上記要素のそれぞれは、さらに、自要素より下位側の左
    部分木階層数と右部分木階層数との差の値を登録する領
    域を有し、 上記第一処理の実行に先行して、各要素の有する上記差
    の値が「+2」または「−2」となるときにその要素よ
    り下位側の左右部分木の階層数が均等でないと判断する
    第二処理およびこの第二処理に引き続いて左右部分木の
    階層数を均等に保つべく上記ポインタの入れ替えを行う
    第三処理を実行することを特徴とする二分木構造データ
    登録処理方法。
  2. 【請求項2】 上記第三処理は、上記差の値が「+2」
    または「−2」になった要素を第一要素、この第一要素
    の1階層上にある要素を第二要素、上記第一要素から階
    層数の多い方向の部分木の1階層下にある要素を第三要
    素、この第三要素から上記第一要素がこの第三要素を指
    す部分木の方向と反対方向の1階層下にある要素を第四
    要素、この第四要素から上記第三要素がこの第四要素を
    指す部分木の方向と反対方向の1階層下にある要素を第
    五要素、上記第四要素から上記第三要素が上記第四要素
    を指す部分木の方向と同じ方向の1階層下にある要素を
    第六要素と名付けた場合に、上記第三要素の有する左右
    部分木階層数の差の値が表す階層数の多い部分木の方向
    が上記第一要素の有する左右部分木階層数の差の値と同
    じ方向である場合または均等な場合に、上記第一要素の
    上記第三要素を指すポインタを上記第二要素の上記第一
    要素を指すポインタに、上記第三要素の上記第四要素を
    指すポインタを上記第一要素の上記第三要素を指すポイ
    ンタに、上記第二要素の上記第一要素を指すポインタを
    上記第三要素の上記第四要素を指すポインタにそれぞれ
    入れ替え、一方、上記第三要素の有する左右部分木階層
    数の差の値が表す階層数の多い部分木の方向が上記第一
    要素の有する左右部分木階層数の差の値と反対方向であ
    る場合または均等な場合に、上記第三要素の第四要素を
    指すポインタを上記第二要素の第一要素を指すポインタ
    に、上記第四要素の上記第五要素を指すポインタを上記
    第三要素の上記第四要素を指すポインタに、上記第一要
    素の上記第三要素を指すポインタを上記第四要素の上記
    第五要素を指すポインタに、上記第四要素の上記第六要
    素を指すポインタを上記第一要素の上記第三要素を指す
    ポインタに、上記第2要素の上記第一要素を指すポイン
    タを上記第四要素の上記第六要素を指すポインタにそれ
    ぞれ入れ替えて実行する処理である請求項1記載の二分
    木構造データ登録処理方法。
JP3149857A 1991-05-24 1991-05-24 二分木構造データ登録処理方法 Pending JPH05120339A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3149857A JPH05120339A (ja) 1991-05-24 1991-05-24 二分木構造データ登録処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3149857A JPH05120339A (ja) 1991-05-24 1991-05-24 二分木構造データ登録処理方法

Publications (1)

Publication Number Publication Date
JPH05120339A true JPH05120339A (ja) 1993-05-18

Family

ID=15484168

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3149857A Pending JPH05120339A (ja) 1991-05-24 1991-05-24 二分木構造データ登録処理方法

Country Status (1)

Country Link
JP (1) JPH05120339A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1040255A (ja) * 1996-07-29 1998-02-13 Nec Software Ltd ハッシュ表管理装置
US8224829B2 (en) 2000-11-30 2012-07-17 Bernard Consulting Limited Database

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1040255A (ja) * 1996-07-29 1998-02-13 Nec Software Ltd ハッシュ表管理装置
US8224829B2 (en) 2000-11-30 2012-07-17 Bernard Consulting Limited Database

Similar Documents

Publication Publication Date Title
US6801200B1 (en) Layout of data structures based on relationships between the data structures
CN108806472B (zh) 电子地图中的道路渲染方法、装置和处理方法、装置
CN106844781B (zh) 数据处理的方法及装置
US10235474B2 (en) In-memory graph analytics system that allows memory and performance trade-off between graph mutation and graph traversal
CN107704597A (zh) 关系型数据库至Hive的ETL脚本创建方法
CN112132832A (zh) 一种增强图像实例分割的方法、系统、设备及介质
CN113254100A (zh) 基于Vue的多级路由动态加载的实现方法
CN112395383A (zh) 基于多源信息融合的人口数据空间化方法、装置和设备
CN111159420B (zh) 一种基于属性计算与知识模板的实体优化方法
US5878407A (en) Storage of a graph
JPH05120339A (ja) 二分木構造データ登録処理方法
CN109933588B (zh) 一种dwg数据转gdb数据的方法和系统
CN108334563A (zh) 一种数据查询的方法及装置
CN113377887A (zh) 一种地图数据更新方法、装置、电子设备及存储介质
CN114996246A (zh) 一种基于NiFi组件的表多个字段校验的数据清洗方法
CN110543664B (zh) 一种面向具有特有结构fpga的工艺映射方法
CN111709593B (zh) 一种基于弱空间约束的空间资源优化分配方法
CN111581946A (zh) 一种语言序列模型解码方法
JP3430273B2 (ja) データベース検索装置及びデータベース検索方法
CN115935564A (zh) 地下管线更新方法
CN113177212B (zh) 联合预测方法和装置
US11740867B2 (en) Data sorting method, apparatus and device, storage medium and program product
CN115983223A (zh) 报表文档审核方法、装置、电子设备和计算机可读介质
CN110910634B (zh) 一种交通路网信息的描述方法及装置
CN115795758A (zh) 基于“节点-边”关系的管线更新系统

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19980210