すべてのパス合計を見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

趙南

パスの合計
バイナリツリーと合計が与えられた場合、各パスの合計が指定された合計に等しいすべてのルートからリーフへのパスを見つけます。
例: sum = 11。

    5 
   / \ 
  4   8
 /   / \ 
2  -2   1 

答えは:

[
  [5, 4, 2], 
  [5, 8, -2]
]

個人的には、時間計算量= O(2 ^ n)、nは与えられた二分木のノードの数だと思います。


ありがとう ビクラムBhatさん デビッド・グレイソン 、タイトな時間の複雑さ= O(nlogn)で、nは与えられたバイナリツリー内のノード数です。

  • アルゴリズムは各ノードを1回チェックします。これにより、O(n)が発生します。
  • "vector one_result(subList);" 高さがO(logn)であるため、パス全体がsubListからone_resultに毎回コピーされ、O(logn)が発生します。

したがって、最後に、時間計算量= O(n * logn)= O(nlogn)です。


このソリューション アイデア DFS [C ++]です。

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
#include <vector>
using namespace std;

class Solution {
public:
    vector<vector<int> > pathSum(TreeNode *root, int sum) {
        vector<vector<int>> list;

        // Input validation.
        if (root == NULL) return list;

        vector<int> subList;
        int tmp_sum = 0;

        helper(root, sum, tmp_sum, list, subList);

        return list;
    }

    void helper(TreeNode *root, int sum, int tmp_sum, 
                vector<vector<int>> &list, vector<int> &subList) {

        // Base case.
        if (root == NULL) return;
        if (root->left == NULL && root->right == NULL) {
            // Have a try.
            tmp_sum += root->val;
            subList.push_back(root->val);

            if (tmp_sum == sum) {
                vector<int> one_result(subList);
                list.push_back(one_result);
            }

            // Roll back.
            tmp_sum -= root->val;
            subList.pop_back();

            return;
        }

        // Have a try.
        tmp_sum += root->val;
        subList.push_back(root->val);

        // Do recursion.
        helper(root->left, sum, tmp_sum, list, subList);
        helper(root->right, sum, tmp_sum, list, subList);

        // Roll back.
        tmp_sum -= root->val;
        subList.pop_back();
    }
};
ヴィクラム・バット

時間の複雑さはO(N)そうですが、すべてのパスを印刷する必要がある場合そうですO(N*logN)uに完全な二分木があるN/2すると、合計パスはになり、各パスにはlogNノードが含まれるためO(N*logN)、最悪の場合は合計になります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

すべての組み合わせを見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

分類Dev

すべてのことばの梯子を取得するためのこのアルゴリズムの時間計算量はどれくらいですか?

分類Dev

最長の回文部分文字列を見つけるこのアルゴリズムの時間計算量はどれくらいですか?

分類Dev

MySQLでエントリのパーセンタイルスコアを見つけるための時間計算量はどれくらいですか?

分類Dev

最大株価を見つけるためのこのアルゴリズムの時間計算量をどのように改善できますか?

分類Dev

ワイルドカードマッチングのためのこのアルゴリズムの時間計算量はどれくらいですか?

分類Dev

このBFSアルゴリズムの時間計算量はどれくらいですか?

分類Dev

このコイン交換アルゴリズムの時間計算量はどれくらいですか?

分類Dev

このアルゴリズム(Big-O)の時間計算量はどれくらいですか?

分類Dev

このアルゴリズムの時間計算量はどれくらいですか?

分類Dev

このアルゴリズム(擬似コード)の時間計算量はどれくらいですか?

分類Dev

この生成アルゴリズムの時間計算量はどれくらいですか?

分類Dev

このJSアルゴリズムの時間計算量はどれくらいですか

分類Dev

これは最短経路を見つけるための最良のアルゴリズム(時間計算量)です

分類Dev

与えられたアルゴリズムの時間計算量はどれくらいですか?

分類Dev

このアルゴリズムの時間計算量はどのくらいですか?

分類Dev

AVLツリーとバイナリツリーを使用したこのアルゴリズムの時間計算量はどれくらいですか

分類Dev

数独のアルゴリズムXの時間計算量はどれくらいですか?

分類Dev

以下のアルゴリズムの時間計算量はどれくらいですか?

分類Dev

アルゴリズムの時間計算量を見つけますか?

分類Dev

次の再帰的アルゴリズムの時間計算量はどのくらいですか?

分類Dev

このアルゴリズムの時間計算量を計算するにはどうすればよいですか?

分類Dev

次の再帰的アルゴリズムの時間計算量をどのように見つけることができますか?

分類Dev

時間計算量に基づくこれら3つのアルゴリズムの違いは何ですか?

分類Dev

なぜ、アルゴリズムの時間計算量を見つける際に、対数の基数が常に2と見なされるのですか?

分類Dev

与えられた値よりも小さい最大値を見つけるための時間計算量はどれくらいですか?

分類Dev

これらの順列および組み合わせアルゴリズムの時間計算量を計算するにはどうすればよいですか?

分類Dev

このアルゴリズムの時間計算量を計算する方法

分類Dev

この場合、ネストされたループの時間計算量はどれくらいですか?

Related 関連記事

  1. 1

    すべての組み合わせを見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

  2. 2

    すべてのことばの梯子を取得するためのこのアルゴリズムの時間計算量はどれくらいですか?

  3. 3

    最長の回文部分文字列を見つけるこのアルゴリズムの時間計算量はどれくらいですか?

  4. 4

    MySQLでエントリのパーセンタイルスコアを見つけるための時間計算量はどれくらいですか?

  5. 5

    最大株価を見つけるためのこのアルゴリズムの時間計算量をどのように改善できますか?

  6. 6

    ワイルドカードマッチングのためのこのアルゴリズムの時間計算量はどれくらいですか?

  7. 7

    このBFSアルゴリズムの時間計算量はどれくらいですか?

  8. 8

    このコイン交換アルゴリズムの時間計算量はどれくらいですか?

  9. 9

    このアルゴリズム(Big-O)の時間計算量はどれくらいですか?

  10. 10

    このアルゴリズムの時間計算量はどれくらいですか?

  11. 11

    このアルゴリズム(擬似コード)の時間計算量はどれくらいですか?

  12. 12

    この生成アルゴリズムの時間計算量はどれくらいですか?

  13. 13

    このJSアルゴリズムの時間計算量はどれくらいですか

  14. 14

    これは最短経路を見つけるための最良のアルゴリズム(時間計算量)です

  15. 15

    与えられたアルゴリズムの時間計算量はどれくらいですか?

  16. 16

    このアルゴリズムの時間計算量はどのくらいですか?

  17. 17

    AVLツリーとバイナリツリーを使用したこのアルゴリズムの時間計算量はどれくらいですか

  18. 18

    数独のアルゴリズムXの時間計算量はどれくらいですか?

  19. 19

    以下のアルゴリズムの時間計算量はどれくらいですか?

  20. 20

    アルゴリズムの時間計算量を見つけますか?

  21. 21

    次の再帰的アルゴリズムの時間計算量はどのくらいですか?

  22. 22

    このアルゴリズムの時間計算量を計算するにはどうすればよいですか?

  23. 23

    次の再帰的アルゴリズムの時間計算量をどのように見つけることができますか?

  24. 24

    時間計算量に基づくこれら3つのアルゴリズムの違いは何ですか?

  25. 25

    なぜ、アルゴリズムの時間計算量を見つける際に、対数の基数が常に2と見なされるのですか?

  26. 26

    与えられた値よりも小さい最大値を見つけるための時間計算量はどれくらいですか?

  27. 27

    これらの順列および組み合わせアルゴリズムの時間計算量を計算するにはどうすればよいですか?

  28. 28

    このアルゴリズムの時間計算量を計算する方法

  29. 29

    この場合、ネストされたループの時間計算量はどれくらいですか?

ホットタグ

アーカイブ