ホームページ > バックエンド開発 > PHPチュートリアル > バイナリツリー部分関数実装 (JAVA)

バイナリツリー部分関数実装 (JAVA)

WBOY
リリース: 2016-07-25 09:02:30
オリジナル
895 人が閲覧しました
主にバイナリツリーの一般的な使い方を実装しています。いくつかの間違いがあるかもしれません。
  1. package Structure.tree;
  2. public class Node {
  3. public int idata;
  4. public double ddata;
  5. public Node leftNode;
  6. public Node rightNode;
  7. public Node() {
  8. }
  9. public void display() {// отй╬╫з╣Ц
  10. System.out.print('{');
  11. System.out.print(idata);
  12. System.out.print(',');
  13. System.out .print(ddata);
  14. System.out.print('}');
  15. }
  16. }
コードをコピー
[コード]パッケージ構造.tree; java.util.Stackをインポートします。 パブリック クラス ツリー { /* ノード属性。ツリーはノードで構成されます */ プライベートノードのルート。 パブリックツリー() { ルート = null; } /*** 指定されたキー値を持つツリー ノードを検索します * * @paramキー * @戻る*/ パブリックノード find(int key) { 現在のノード = ルート; while(current.idata != キー) { if(キー キー) { isLeftNode = true; 現在 = 現在の.leftNode; } else if(current.idata キー) { isLeftNode = true; 現在 = 現在の.leftNode; } それ以外 { isLeftNode = false; 現在 = current.rightNode; } if(current == null) {//対応する指定されたノードが見つかりませんでした フラグ = false; リターンフラグ; } }//while ループを終了します // この時点までの実行は、削除する現在のノードを見つけることを意味します //削除されたノードはリーフノードです if(current.leftNode == null && current.rightNode == null) { if(isLeftNode == true) 親.leftNode = null; それ以外 親.rightNode = null; } //削除されたノードには左側の子ノードのみが含まれます else if(current.rightNode == null) { if(現在 == ルート) ルート = current.leftNode; else if(isLeftNode) 親.leftNode = 現在の.leftNode; それ以外 親.rightNode = 現在.leftNode; } //削除されたノードには正しい子ノードのみが含まれます else if(current.leftNode == null) { if(現在の == ルート) ルート = current.rightNode; else if(isLeftNode) 親.leftNode = current.rightNode; それ以外 親.rightNode = current.rightNode; } //削除されたノードには左の子ノードと右の子ノードがあります それ以外 { ノード交換ノード = getReplacedNode(現在); if(現在 == ルート) ルート = 置き換えられたノード; else if(isLeftNode) parent.leftNode = replaceNode; それ以外 parent.rightNode = replaceNode; } リターンフラグ; } /*** 選択範囲の走査方法を決定する * * @param traverseType*/ パブリック void traverse(int traverseType) { スイッチ(トラバースタイプ) { ケース1: System.out.print("n 事前注文トラバーサル:"); preOrder(ルート); 壊す; ケース 2: System.out.print("n の順序トラバーサル:"); inOrder(ルート); 壊す; ケース 3: System.out.print("n 事後走査:"); postOrder(ルート); 壊す; } System.out.println(); } /*** 順番に並べ替えます*/ private void preOrder(Node ノード) { if(ノード!= null) { System.out.print(node.idata + " "); preOrder(node.leftNode); preOrder(node.rightNode); } } /**※中順に並べています*/ private void inOrder(Node ノード) { if(ノード!= null) { preOrder(node.leftNode); System.out.print(node.idata + " "); preOrder(node.rightNode); } } /**※降順に並べています*/ private void postOrder(Node ノード) { if(ノード!= null) { preOrder(node.leftNode); preOrder(node.rightNode); System.out.print(node.idata + " "); } } /*** [削除されたノード] を置換するノードを検索し、[置換ポイント] をルートとするサブツリーを構築します * 説明: [削除されたノード] の右側のサブツリーで最小のキー値を持つ点を [置換ノード] として検索します。これは明らかに右側のサブツリー (存在する場合) の左側の葉ノードです。 * * @param delNode * @戻る*/ プライベート ノード getReplacedNode(Node delNode) { 現在のノード = delNode.rightNode; ノードが置き換えられましたNode = delNode; ノードが置き換えられましたParentNode = delNode; while(current != null) { replaceParentNode = replaceNode; 置き換えられたノード = 現​​在; 現在 = 現在の.leftNode; }if(replacedNode != delNode.rightNode) { // replaceNode就是要代替掉【被删除节点】的节点 replaceParentNode.leftNode = replaceNode.rightNode; replaceNode.rightNode = delNode.rightNode; } replaceNode.leftNode = delNode.leftNode; 置き換えられたノードを返します。 } /*** ツリー構造を表示 * * @paramノード*/ @SuppressWarnings("未チェック") public void displayTree() { System.out.println("


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート