時間複雑性O(N)未満で、Nは、ツリーのノードの数である:完全二分木、必要なノードの数を見つけることが知られ

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 }

おすすめ

転載: www.cnblogs.com/lihuazhu/p/10963885.html