61平衡二分木 - のオファーを受賞

タイトル説明

入力バイナリツリーは、バイナリツリーは、バランスの取れた二分木か否かが判断されます。
 
ソリューション:
  方法A:深いトラバーサルを使用して、決定された各ノードは、平衡二分木ではなく、このトップダウンアプローチは、ボトムノードが繰り返されるに複数回が決定されるリード
  方法2:先行順決意、このボトムアップ法を使用し、各ノードは一度だけ決定する必要があります
 
  
1つの // 方法:深いトラバーサルを使用して、各ノードが決定されるが、平衡二分木ではなく、このトップダウンアプローチはボトムノードが複数回の判定が繰り返されるに至る
2  クラスSolution01を{
 3。 公共4      BOOL IsBalanced_Solution(ツリーノード* PROOT ){
 5          IF(PROOT == nullptr A)リターン trueに;
 6。         INT左=のgetHeight(pRoot-> 左);
 7。         INT右=のgetHeight(pRoot-> 右);
 8。         IF(ABS(左-右)> 1。 リターン falseに;
 。9          リターン IsBalanced_Solution(pRoot->左)&& IsBalanced_Solution(pRoot->右);
 10      }
 11。 プライベート12である     INT *のgetHeight(ツリーノードPROOT)
 13は     、{
 14          IF(PROOT == nullptr a)に戻り 1 ;
 15          int型の左=のgetHeight(pRoot-> 左);
 16          INT右=のgetHeight(pRoot-> 右)
 。17          リターン MAX(左、右)+ 。1 ;
 18れる     }
 。19  ;}
 20である 
21ことである // 各ノードが一度だけ決定する必要がある、先行順決意、このボトムアップ法を使用:方法2 
図22は、ある クラスSolution02 {
 23であります 公共24      ブール IsBalanced_Solution(ツリーノード* PROOT){
 25          であれば(PROOT == nullptr)を返す 26          INTのレベル= 0 27          リターンIsBalanced_Solution(PROOT、レベル)。
28      }
 29  プライベート30      ブール IsBalanced_Solution(ツリーノード* PROOT、INTレベル)
 31      {
 32          であれば(PROOT == nullptr)
 33          {
 34              レベル= 0 35              リターン trueに;
 36          }
 37          // 後順に係る決定され、その後、現在のノードが深さのツリーのルートであり、左右のサブツリー
38が         INT =左0右= 0 ;
 39          IF(IsBalanced_Solution(pRoot->左、左) IsBalanced_Solution &&(pRoot-> 右、右))
 40          {
 41は、             IF - <=(右ABS(左)。1 42は             、{
 43は                  レベル= MAX(左、右)+ 。1 ;
 44れる                 戻り trueに;
 45              }
 46れます         }
47          リターン はfalse ;
48      }
 49 }。

 

おすすめ

転載: www.cnblogs.com/zzw1024/p/11707121.html