バイナリツリーの再帰

バイナリツリーの深さ1.Minimum

    //再帰バージョン、O(N)、O(logN個)の空間的な複雑さの時間複雑
	プライベート静的INT minDepth(ツリーノードルート){ 
		IF(ルート== NULL)戻り0;   
		戻りMath.min(minDepth(root.left) 、minDepth(root.right))+ 1; 
	}

バイナリツリーの深さ2.Maximum

同上、再帰的バージョン、O(N)、O(logN個)の空間的な複雑さの//時間複雑。
公共INT MAXDEPTH(ツリーノードルート){ 
    IF(ルート== NULL)戻り0; 
    Math.max(MAXDEPTH(root.leftを返します)、MAXDEPTH(root.right))+ 1; 
}

3.Path合計

ルート・ツー・リーフパスを5-> 4-> 11->和が2〜22が存在するように、trueを返す
//时间复杂度はO(n)、空间复杂度O(LOGN)
パブリックブールhasPathSum(ツリーノードのルートを、INT合計){ 
    IF(ルート== NULL)がfalseを返します。
    もし(root.left == nullの&& root.right == NULL)//葉の
        還元額== root.val。
    hasPathSum(root.left、サム- root.val)を返す|| hasPathSum(root.right、合計- root.val)。
}

4.Path合計II

        同上、返回路径//时间复杂度はO(n)、空间复杂度O(LOGN)
	パブリックリスト<リスト<整数>> pathSum(ツリーノードのルート、int型の合計){ 
		リスト<リスト<整数>>結果=新規のArrayList < >(); 
		ArrayListの<整数> CUR =新しいArrayListを<>(); //中间结果
		pathSum(根、合計、CUR、結果); 
		結果を返します。
	} 

	プライベート静的ボイドpathSum(ツリーノードのルート、INTギャップのArrayList <整数> CUR、リスト<リスト<整数>>結果){ 
		IF(ルート== NULL)のリターン; 
		cur.add(root.val)。
		IF(root.left == NULL && root.right == NULL){ 
			IF(ギャップ== root.val){result.add(新規のArrayList <>(CUR))。} 
		} 
		pathSum(root.left、ギャップ- root.val、CUR、結果)。
		pathSum(root.right、
		cur.remove(cur.size() - 1)。

5.Binaryツリーの最大パスの合計

    O(N)、O(logN個)の空間的な複雑さの//時間複雑
    プライベートINT max_sum、
	プライベートINT DFS(ツリーノードルート){ 
		IF(ルート== NULL)戻り0; 

		int型L = DFS(root.left); 
		INT DFS = R&LT(root.right); 

		INT = SUMのroot.val; 
		IF(L> 0)= SUM + L; 
		IF(R&LT> 0)= SUM + R&LT; 

		max_sum Math.max =(SUM、max_sum); 
		リターン?math.max(L、R&LT)> 0 math.max(L、R&LT)+ root.val:root.val; 
	}

 

おすすめ

転載: www.cnblogs.com/rnanprince/p/11595176.html