パブリッククラスBinaryTreeNode { プライベートintデータ; //数据 プライベートBinaryTreeNode leftChild; //左孩子 プライベートBinaryTreeNode rightChild; //右孩子 公共int型のgetData(){ 戻り値のデータ。 } 公共ボイドのsetData(intデータ){ this.data =データ。 } 公共BinaryTreeNode getLeftChild(){ リターンleftChild。 } 公共ボイドsetLeftChild(BinaryTreeNode leftChirld){ this.leftChild = leftChirld。 } 公共BinaryTreeNode getRightChild(){ リターンrightChild。 } 公共ボイドsetRightChild(BinaryTreeNode rightChild){ this.rightChild = rightChild。 } }
BinaryTreeクラス{パブリック プライベートBinaryTreeNodeルート、 公共BinaryTree(BinaryTreeNodeルート){ this.root =ルート; } 公共ボイドsetRoot(BinaryTreeNodeルート){ this.root =ルート; } 公共BinaryTreeNode getRoot(){ ;ルートを返す } / ** *クリア二分木: *各ノードは両方の再帰的削除、部分木法のルートノードとしてノードに第1のクリアを提供する工程; *ツリーを削除し、次いで第一の方法でルートノードを削除する方法を提供 * / //すべてのノードのサブツリークリアし ます。public voidクリア(BinaryTreeNodeノード){ IF(!ノード= null)を{ ;クリア(node.getLeftChild()) をクリア(node.getRightChild()); ノード= NULL ; //ノードを削除 } } //空の木 {クリアパブリック()無効 ノード1 *必要なノードの数は、我々は、ノードのサブツリーを得るために見ると数字を達成。 クリア(ルート); } //バイナリツリーが空であるか否かを判断する パブリックブールのisEmpty()は{ ルートを返す== NULL; } //は、サブツリー内のノードの高さを取得する パブリックINT HEIGH(BinaryTreeNodeノード){ (ノード== IF NULL){ 0を返す; //再帰端、空の木の高さ0 }他{ //再帰取得左サブツリー高 INT Lを= HEIGH(node.getLeftChild()); //右サブツリーを再帰的に取得高 INT R = HEIGH(node.getRightChild()); //(彼らはこの層の数を所有したいので1 +)の高さは、高い側考慮すべき リターンL> R(L + 1):( R + 1);? } } 公共INT HEIGH(){ HEIGH(ルート)を返す; } / ** ノードの*バイナリツリーを: *前記第1のノードが肯定0の数は、空である。 * 3空でない場合には、カウントこのノードの後に左と右のサブツリーの再帰的にすべての子ノード、 * 4は、すべてのノードの指定された数に追加されるサブツリーのルートノードである * 5ノードのバイナリツリーは、ルートノードであれば入力する * / 公共int型のサイズ(BinaryTreeNodeノード){ IF(ノード== NULL){ 戻り0; //ノードが空である場合、0のノードに戻り }他{ //計算ノードので+1に //は再帰的に最終の追加、サブツリー右サブツリーのノードとノードを残して取得 。+サイズ1つのリターン(node.getLeftChild())+サイズ(node.getRightChild()); } } //バイナリツリーのノードの数取得 公共int型のサイズ(){ 戻りサイズ(ルート); } 父ノードを返す//ノード //ノードのサブツリー・ノードのサブツリーの親 パブリックBinaryTreeNodeのgetParent(BinaryTreeNodeサブツリーBinaryTreeNodeノード){ ////ツリーが空の場合(サブツリー== NULL)が{親ノードが存在しない場合 、戻りNULL; } //サブツリーのルートの周りに子供の一つは、未知の起源のノード、サブツリー戻りのルートである場合、 (node.getLeftChildを返します)。 IF(subTree.getLeftChild()== subTree.getRightChildノード||()==ノード){ 戻りサブツリー; } BinaryTreeNode親= NULL; IF {(のgetParent(subTree.getLeftChild()、ノード)= NULL!) 親= getParent(subTree.getLeftChild()、ノード); 戻り親; }他{ //再帰左サブツリーの リターンのgetParent(subTree.getRightChild()、ノード); } } //バイナリツリーノードにノードの親ノードを検索 公共BinaryTreeNode getParent(BinaryTreeNodeノード){ リターン(ルート== == NULL ||ルートノード)ヌル:?のgetParent(ルートノード); } 左サブツリー戻す// パブリックBinaryTreeNode getLeftTree(BinaryTreeNodeノード){ } 右の子を返す//をツリー パブリックBinaryTreeNode getRightTree(BinaryTreeNodeノード){ node.getRightChild()を返す; } / ** *バイナリツリーに挿入されている: * 2例:ノードの左の子ノードの挿入、ノードの右の子ノードに *価値これは、自ノードが子ノードを有する場合、そのような挿入がこの位置に前のノードを上書きすることに留意しました。 *加えて、子ノードが挿入されているが、しかしまた、子ノードのサブツリーを表すことができます。 *ただし、これはノードが挿入されているもののので、サブツリーの存在については、このノードのノードかどうかを知るようには見えないが、多くのノード(サブツリーの挿入)を挿入することが可能である * / //ノードを挿入します左ノード 公共ボイドinsertLeft(BinaryTreeNode親、BinaryTreeNode newNode){ parent.setLeftChild(newNodeが); } //ノードの右ノードに挿入し ます。public void insertRight(BinaryTreeNode親、BinaryTreeNode newNode){ parent.setRightChild(newNode); } / /予約限定! 無効(BinaryTreeNodeノード){予約限定公共 IF(ノード= nullを!){ System.out.printlnは(node.getData()); //最初のルートアクセス 予約限定(node.getLeftChild()); //最初トラバーサルを残しましたサブツリー 予約限定(node.getRightChild()); //右のサブツリー最初の先行順走査 } } //行きがけ ます。public void INORDER(BinaryTreeNodeノード){ IF(!ノード= NULL){ INORDER(node.getLeftChild()) ; //左サブツリーのルート横断 するSystem.out.println(ノード); //ルートアクセス 順序どおり(node.getRightChild()); //右サブツリーのルート横断 } } //後順 公共ボイド後順(BinaryTreeNodeノード){ IF(ノード!= NULL){ 後順(node.getLeftChild()); //左サブツリーのルート横断後 後順を(node.getRightChild()); //右部分木トラバーサル System.out.println(ノード); //アクセスルート } } }