バイナリツリーの深さ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; }