最初の小さな問題が、これは比較的簡単で、前のバイナリツリーは多くの質問をした、バイナリツリーの深さです。
1 クラスソリューション{ 2 公共: 3 INT MAX(int型のx、int型のY) 4 { 5 リターン(X> Y)?X:Y。 6 } 7 INT TreeDepth(ツリーノード* PROOT) 8 { 9 もし(PROOT == NULL) 10 リターン 0 。 11 INT左= 0、右= 0、深度= 0 。 12 であれば(pRoot-> 左) 13 { 14 左= TreeDepth(pRoot-> 左)。 15 } 16 であれば(pRoot-> 右) 17 { 18 右= TreeDepth(pRoot-> 右)。 19 } 20 リターン MAX(右、左)+ 1 。 21 22 } 23 }。
第2の小問題は、それが再帰的なマスターを中心にした最初の質問、に基づいて難しいことではありません。
1 クラスソリューション{ 2 公共: 3 4 int型の最大値(INT X、int型のY) 5 { 6 リターン(X> Y)?X:Y。 7 } 8 9 INT TreeDepth(ツリーノード* PROOT) 10 { 11 であれば(PROOT == NULL) 12 リターン 0 。 13 14 のint左= 0、右= 0 。 15 左= TreeDepth(pRoot->左)。// ここでは、関数が入力することができ、最初の2行は、再帰的に終了することができるので、それが空の場合、左右のサブツリーが、空のサブツリーであるか否かを判断する 16を 右= TreeDepth(pRoot-> 右) 。17 リターン左MAX(右)+ 1 ; 18である 。19 } 20 BOOL IsBalanced_Solution(ツリーノード* PROOT){ 21は IF(PROOT == NULL) 22が 戻り trueに、 23であり 、// 左と右の部分木の深さを計算 24 INTを左= TreeDepth(pRoot-> 左)。 25 INT右= TreeDepth(pRoot-> 右) 26は、 IF -右)= <(ABS(左1。) 27 リターン IsBalanced_Solution(pRoot->左)&& IsBalanced_Solution(pRoot-> 右)。 28 他の 29 の復帰 はfalse ; 30 } 31 }。
ツリーのタイトルのために、彼の心はあまりにも複雑なことを考えないように、次の手順を実行しますように。
1.、再帰終了条件を書く一般的にノードポインタがヌルであります
2.最も簡単な木の木のだと思うだけで3ノードと計算方法を考えます
3.それは、より複雑なツリーにも対応することができ、再帰的な条件を書きます