1 パッケージmy_basic.class_4; 2 。3 パブリック クラスCode_08_CBTNode { 4 // 低い複雑性Oの完全なバイナリツリーのノード番号(N) 5。 6つの。 パブリック 静的 クラスノード{ 7。 int型の値、 8 ノード左; 9 ノード右; 10 。11 パブリックノード(int型の値){ 12は、 この .Valueの= 、値 13である ;} 14 } 15 16 パブリック 静的 INT NODENUM(ノードヘッド){ 17 であれば(ヘッド== NULL ){ 18 リターン 0 。 19 } 20 リターン BS(ヘッド、1、mostLeftLevel(ヘッド1 ))。 21 } 22の 23 パブリック 静的 int型の基地局(ノードノード、INTのレベル、INTの時間){ 24 であれば(レベル== H){ 25 リターン 1 。 26 } 27 であれば(mostLeftLevel(node.right、レベル+ 1)==の時間){ 28 System.out.println( "递归中右= H - :" +(1 <<(H -レベル)+ BS(node.right、レベル+ 1 、h)参照))。 29 リターン(1 <<(H -レベル))+ BS(node.right、レベル+ 1 、H)。 30 } 他{ 31 のSystem.out.println( "!递归中右= H:" +(1 <<(H -レベル- 1)+ BS(node.left、レベル+ 1 、h)参照))。 32 リターン(1 <<(H -レベル- 1))+ BS(node.left、レベル+ 1 、H)。 33 } 34 } 35 36 パブリック 静的 INT mostLeftLevel(ノードノード、INTのレベル){ 37 、一方(ノード!=NULL ){ 38 レベル++ 。 39 ノード= node.left。 40 } 41 リターン・レベル- 1 。 42 } 43 44 // 打印二叉树 45 公共 静的 ボイドprintTree(ノードヘッド){ 46 のSystem.out.println( "バイナリツリー" )。 47 printInOrder(ヘッド、0、 "H"、17 ); 48 のSystem.out.println(); 49 } 50 51 パブリック 静的 ボイドprintInOrder(ノードヘッド、int型の高さ、文字列に、INT LEN){ 52 であれば(ヘッド== NULL ){ 53 リターン。 54 } 55 printInOrder(head.right、高さ+ 1、 "V" 、LEN)。 56 列のval =まで+ head.value + します。 57 INT lenM = val.length()。 58 INT lenL =(LEN - lenM)/ 2 。 59 int型 lenR = LEN - lenM - lenL。 60 ヴァル= getSpace(lenL)+ヴァル+ getSpace(lenR)。 61 System.out.println(getSpace(高さ* LEN)+ val)で、 62 printInOrder(head.left、高さ+ 1、 "^" 、LEN)。 63 } 64 65 パブリック 静的文字列getSpace(int型NUM){ 66 文字列のスペース= "" ; 67 のStringBuffer bufに= 新しい StringBufferの( "" ); 68 のためには、(int型、I = 0; I <NUM; iは++ ){ 69 buf.append(空間) 70 } 71 リターンbuf.toString()。 72 } 73 74 75 公共 静的 ボイドメイン(文字列[]引数){ 76 ノードヘッド= 新しいノード(1 )。 77 head.left = 新しいノード(2 )。 78 head.right = 新しいノード(3 )。 79 head.left.left = 新しいノード(4 )。 80 head.left.right = 新しいノード(5 )。 81 head.right.left = 新しいノード(6 )。 82 のSystem.out.println(NODENUM(ヘッド))。 83 84 // printTree(ヘッド); 85 86 } 87 }
時間複雑性O(N)未満で、Nは、ツリーのノードの数である:完全二分木、必要なノードの数を見つけることが知られ
おすすめ
転載: www.cnblogs.com/lihuazhu/p/10963885.html
おすすめ
ランキング