バイナリツリーP16(leetcode 104)の最大深さ

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。
               } 
 ++ 
           } 

           戻り値の深さ; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/repinkply/p/12455739.html