A:問題解決のためのアイデア
この質問は、解決するために、再帰的かつ反復的な方法であることができます。
2:完全なコード例(C ++版、Java版)
再帰C ++:
クラスのソリューション { パブリック: int型の最大(int型、int型b)は 、{ 戻る > bは?:B; } INT MAXDEPTH(ツリーノード* ルート) { 場合(ルート== NULL)戻り 0 。 リターン MAX(MAXDEPTH(root->左)右、MAXDEPTH(root->))+ 1 ; } }。
再帰のJava:
クラスソリューション{ 公共 のint MAXDEPTH(ツリーノードのルート) { 場合(ルート== NULL)戻り 0 。 リターン Math.max(MAXDEPTH(root.left)、MAXDEPTH(root.right))+ 1 。 } }
反復法C ++:
// 時間:O(n)は、スペース:O(n)の クラスのソリューション { パブリック: int型 MAXDEPTH(TreeNodeの* ルート) { 場合(ルート== NULL)の戻り 0 ; キュー <TreeNodeの*> キュー; queue.push(ルート)。 int型の深さ= 0 ; しばらく(!queue.empty()) { int型のサイズ= queue.size(); 以下のために(INT iが= 0 ; I <サイズを、I ++ ) { ツリーノード * T =queue.front(); queue.pop(); もし(!T->左= NULL)queue.push(T-> 左)。 もし(!T->右= NULL)queue.push(T-> 右)。 } 深 ++ 。 } 戻り値の深さ; } }。
反復法のJava:
クラスソリューション{ 公共 のint MAXDEPTH(ツリーノードのルート) { 場合(ルート== NULL)戻り 0 。 キュー <のTreeNode>キュー= 新しい LinkedListは<> (); int型の深さ= 0 ; queue.add(ルート)。 しばらく(!queue.isEmpty()) { int型のサイズ= queue.size(); 以下のために(INT iが= 0 ; I <サイズ; I ++ ) { ツリーノードT =queue.poll(); もし(!t.left = nullは)(t.left)queue.add。 もし(!t.right = nullは)(t.right)queue.add。 } 深 ++ 。 } 戻り値の深さ; } }