アドレス
https://www.acwing.com/problem/content/66/
https://www.acwing.com/problem/content/67/
https://www.acwing.com/problem/content/submission/68/
3つの質問は、再帰的トラバーサルが解決することができるバイナリツリーの使用に関連しています
70バイナリ検索ツリーのk番目のノード
二分探索木を考えると、その中の最初のk小さいノードを検索してください。
あなたはそのツリーとkが存在していると仮定し、かつ1≤k≤ツリーの概要ポイントがあります。
エントリー
入力:ルート= [ 2、1、3、NULL、NULL、NULL、NULL ]、K = 3 2 / \ 1。 3 出力:3
INORDERトラバーサル数はさらにKを追加しました
Kノードを横断するときにターゲットノードを見つけるために
1 / * * 2 *バイナリツリーノードの定義。 3 *構造体のTreeNode { 4 * int型のval; 5 *のTreeNode *左; 6 *のTreeNode *右; 7 *ツリーノード(INT X):(NULL)左のval(X)、右(NULL){} 8 *}。 9 * / 10 クラスソリューション{ 11 公共: 12ツリーノード* ANS。 13 のTreeNode *旅行(ツリーノード*根、INT&K) 14 { 15 であれば(ルート== NULL)リターンヌル; 16 17 旅行(root-> 左、K)。 18 k-- 。 19 であれば(k個の== 0)ANS = ルート。 20 21 旅行(root-> 右、K)。 22 23 24 戻りNULL。 25 } 26 27 のTreeNode * kthNode(ツリーノード*根、int型K){ 28 旅(ルート、K)。 29の 30 リターンANS; 31 } 32 }。
71深さのバイナリツリー
入力バイナリツリーのルート、ツリー要求の深さ。
、ツリー内の最長パスの長さの深さ(ルート、リーフノードを含む)リーフノードを順次通過するルートノードから経路ツリーを形成します。
エントリー
入力:バイナリツリー[ 8、12は、2、NULL、NULL、6。 、4。 、NULL、NULL、NULL、NULL ]以下に示すとおり 8 / \ 12は 2 / \ 。6 4。 出力:3
再帰的トラバーサルを横断する層を追加すること
1 / * * 2 *バイナリツリーノードの定義。 3 *構造体のTreeNode { 4 * int型のval; 5 *のTreeNode *左; 6 *のTreeNode *右; 7 *ツリーノード(INT X):(NULL)左のval(X)、右(NULL){} 8 *}。 9 * / 10 クラスソリューション{ 11 公共: 12 INT ANS = 0 。 13 14 空隙旅行(ツリーノード*根、int型K){ 15 であれば(ルート== NULL){ 16 もし(K> ANS) 17の ANS = K。 18 リターン; 19 } 20 旅行(root->右、K + 1 )。 21 旅行(root->左、K + 1 )。 22 23 } 24 25 INT treeDepth(ツリーノード* ルート){ 26 であれば(ルート== NULL)戻り 0 。 27 旅行(根、0 ); 28の 29 30 リターンANS; 31 } 32 }。
72平衡二分木
入力バイナリツリーのルートノードは、ツリーの決意は、平衡二分木ではありません。
バイナリツリーの任意のノードの左及び右の部分木の深さがない複数の点によって異なる場合、それは平衡二分木です。
注意:
- 引当金の空の木は平衡二分木です。
エントリー
入力:バイナリ[ 5、7、11、NULL、NULL、12は、9。 、NULL、NULL、NULL、NULL ]以下に示すように、 5 / \ 7。 11。 / \ 12れている 9。 出力:trueに
バック約サブツリーの大きい深さまでサブツリーの各ノードの記録深さ再帰トラバーサル
1 / * * 2 *バイナリツリーノードの定義。 3 *構造体のTreeNode { 4 * int型のval; 5 *のTreeNode *左; 6 *のTreeNode *右; 7 *ツリーノード(INT X):(NULL)左のval(X)、右(NULL){} 8 *}。 9 * / 10 クラスソリューション{ 11 公共: 12 BOOL ANS = 真。 13 のint isBalancedInner(ツリーノード*根、int型K) 14 { 15 であれば(ルート== NULL)リターン・K; 16 17 のint L = isBalancedInner(root->左、K + 1 )。 18 INT R = isBalancedInner(root->右、K + 1 )。 19 20 であれば(ABS(LR)> 1)ANS = 偽。 21 22 リターンMAX(L、R)。 23 } 24 25 BOOL isBalanced(ツリーノード*のルート){ 26 isBalancedInner(根、0 ); 27の 28 リターンANS; 29 } 30 }。