Java プログラミング スキル - データ構造とアルゴリズム「シーケンシャル バイナリ ツリー」

Java プログラミング スキル - データ構造とアルゴリズム「シーケンシャル バイナリ ツリー」

基本概念

データストレージの観点から見ると、配列ストレージとツリーストレージは相互に変換できます。つまり、配列をツリーに変換したり、ツリーを配列に変換したりできます。次の図に示すように:


順次記憶バイナリツリーの特性:

  1. 順次ストレージでは通常、完全なバイナリ ツリーのみが考慮されます。
  2. n 番目の要素の左の子ノードは 2 * n+1 です。
  3. n 番目の要素の右の子ノードは 2 * n + 2 です。
  4. n番目の要素の親ノードは(n-1)/2です。
  5. n はバイナリ ツリー内の要素数を表します (上の図に示すように、番号は 0 から始まります)。

必要

配列{1,2,3,4,5,6,7}が与えられた場合、二分木の順序順走査の方法で走査する必要があります。順序順走査の結果は1,2,4,5,3,6,7、

さらに、インオーダー トラバーサルとポストオーダー トラバーサルを完了します。

コード例

  1. パッケージ com.xie.tree;
  2.  
  3. /**
  4. * @著者: xiexiaofei
  5. * @日付: 2020-02-09 20:04
  6. * @説明:
  7. */
  8. パブリッククラス ArrBinaryTreeDemo {
  9. 公共 静的void main(String[] args) {
  10. int [] arr = {1, 2, 3, 4, 5, 6, 7};
  11. ArrBinaryTree は、arr という名前のバイナリツリーを作成します。
  12. System. out .println( "順番に格納されたバイナリツリーの事前順序トラバーサル配列" );
  13. arrBinaryTree.preOrder(0);
  14. System.out.println( ) ;
  15. System.out.println ( "バイナリツリーを順番に格納する順序走査配列" );
  16. バイナリツリーの順序を0に変更します。
  17. System.out.println( ) ;
  18. System. out .println( "バイナリツリーを順番に格納する後順トラバーサル配列" );
  19. arrBinaryTree.postOrder(0);
  20. System.out.println( ) ;
  21.  
  22. /**
  23. * バイナリツリーの事前順序走査配列を順番に格納する
  24. * 1 2 4 5 3 6 7
  25. * バイナリツリーの順序付き走査配列を順番に格納する
  26. * 2 4 5 1 3 6 7
  27. * バイナリツリーのポストオーダートラバーサル配列を順番に格納する
  28. * 2 4 5 3 6 7 1
  29. */
  30.  
  31. }
  32. }
  33.  
  34. //順次ストレージバイナリツリーのトラバーサルを実装する
  35. クラス ArrBinaryTree {
  36. private int [] arr; //データノードを格納する配列
  37.  
  38. パブリックArrBinaryTree( int [] arr) {
  39. this.arr = arr;
  40. }
  41.  
  42. /**
  43. * 順番に格納されたバイナリツリーの事前順序走査を完了するメソッドを記述します。
  44. *
  45. * @paramインデックス配列の添え字
  46. */
  47. パブリックvoid preOrder( int  索引) {
  48. (arr == null || arr.length == 0)の場合{
  49. System.out.println ( "配列は空なので、バイナリツリーの事前順序で走査することはできません" );
  50. }
  51. // 現在の要素を出力する
  52. システム.out.print (arr[インデックス]+ "" );
  53. //左への再帰的トラバーサル
  54. ((2 *インデックス+ 1) < arr.length) の場合 {
  55. preOrder(2 *インデックス+ 1);
  56. }
  57. //右方向への再帰
  58. ((2 *インデックス+ 2) < arr.length) の場合 {
  59. preOrder(2 *インデックス+ 2);
  60. }
  61. }
  62.  
  63. /**
  64. * 順番に格納されたバイナリツリーの順序どおりのトラバーサルを完了するメソッドを記述します。
  65. *
  66. * @paramインデックス 
  67. */
  68. パブリックvoid infixOrder( int  索引) {
  69. (arr == null || arr.length == 0)の場合{
  70. System.out.println ( "配列は空なので、バイナリツリーの事前順序で走査することはできません" );
  71. }
  72.  
  73. //左への再帰的トラバーサル
  74. ((2 *インデックス+ 1) < arr.length) の場合 {
  75. preOrder(2 *インデックス+ 1);
  76. }
  77.  
  78. // 現在の要素を出力する
  79. システム.out.print (arr[インデックス]+ "" );
  80.  
  81. //右方向への再帰
  82. ((2 *インデックス+ 2) < arr.length) の場合 {
  83. preOrder(2 *インデックス+ 2);
  84. }
  85.  
  86. }
  87.  
  88. /**
  89. * 順番に格納されたバイナリツリーの事後順序トラバーサルを完了するメソッドを記述します。
  90. *
  91. * @paramインデックス 
  92. */
  93. パブリックvoid postOrder( int  索引) {
  94. (arr == null || arr.length == 0)の場合{
  95. System.out.println ( "配列は空なので、バイナリツリーの事前順序で走査することはできません" );
  96. }
  97.  
  98. //左への再帰的トラバーサル
  99. ((2 *インデックス+ 1) < arr.length) の場合 {
  100. preOrder(2 *インデックス+ 1);
  101. }
  102.  
  103. //右方向への再帰
  104. ((2 *インデックス+ 2) < arr.length) の場合 {
  105. preOrder(2 *インデックス+ 2);
  106. }
  107.  
  108. // 現在の要素を出力する
  109. システム.out.print (arr[インデックス]+ "" );
  110.  
  111. }
  112.  
  113. }

【編集者のおすすめ】

  1. K8S の基本的なアーキテクチャ概念とネットワーク モデルを理解するのに役立つ 5 分
  2. 1992 年に Baidu のプログラマーが逮捕されたことは、私たちにどのような警告を与えているのでしょうか。
  3. オープンソースのクラウドディスクツール: Nextcloud 21 プライベートクラウドディスク構築
  4. よりクリーンなMicrosoft Windows 10 21H2メジャーアップデートにより、システム内の肥大化したソフトウェアの数が削減されます
  5. 996 作業システムは良いのか悪いのか?

<<:  世界一のAIサーバーになるための勇気と戦略

>>:  人工知能は人間の文化を継承するが、人間の偏見も受け継いでいる

ブログ    
ブログ    
ブログ    

推薦する

...

...

ムスク・ニューラリンクに挑戦!スタンフォード大学の新しい脳コンピューターインターフェースは脳とシリコンベースのチップを直接接続する

[[319624]]最近、スタンフォード大学の研究者らは、脳をシリコンベースの技術に直接接続できる新...

人工知能が誤って解釈する画像とはどのようなものでしょうか?

ウィリアム・ギブソンの2010年の小説『ゼロ・ヒストリー』では、ある登場人物が「これまでで最も醜いT...

ByteDance、最大6.9倍のパフォーマンス向上を実現した大規模モデルトレーニングフレームワークveGiantModelをオープンソース化

背景近年、NLPの応用分野では大きな進歩がありました。Bert、GPT、GPT-3などの超大規模モデ...

科学者らは初めてAIメタ学習を神経科学に導入し、脳画像精密医療の向上が期待される

最近、シンガポール国立大学、バイトダンス、その他の機関が共同で開発した技術的成果が、トップクラスの神...

AIを使用するための実践的な方法論:次の5つのステップに従ってください

Gartner の調査によると、約 37% の組織が何らかの形で AI を実装しています。しかし、E...

機械学習はバッテリー寿命を予測するのに役立ちます。バッテリーを何回充電できるかを正確に把握できます。

バッテリー寿命の決定は、モバイルハードウェアの開発において重要な部分です。しかし、バッテリーの電気化...

大きな AI 問題の解決: AI 操作のエネルギー消費を削減するにはどうすればよいでしょうか?

現在、AI分野で画期的な進歩を遂げているディープラーニングモデルの規模が大きくなるほど、エネルギー消...

...

...

...

Paxos と Raft はコンセンサスアルゴリズム/プロトコルではないのですか?

インターネットの一員として、私たちは「分散」の雰囲気に浸ることがよくあります。高可用性、高信頼性、高...

人工知能認知学習—教育の未来?

人工知能(AI)はどこにでもあります。スマートセンサーを使用して素晴らしい写真を撮影するスマートフォ...