タイトル説明
入力バイナリツリーは、バイナリツリーは、バランスの取れた二分木か否かが判断されます。
ソリューション:
方法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 }。