C++ を使用して、どのパス上にも存在せず、パスの合計が k 未満であるすべてのノードを削除します。
この問題には、ルート ノードからリーフ ノードまでのパスが完全に定義されているバイナリ ツリーがあります。ルート ノードからリーフ ノードまでのすべてのノードの合計は k 以上である必要があります。したがって、合計が k 未満であるパス内のすべてのノードを削除する必要があります。ここで覚えておくべき重要なことは、ノードは多くのパスの一部である可能性があるため、そのようなノードはすべてのパスの合計が k 未満の場合にのみ削除されるということです。
ルート ノードからリーフ ノードまでの合計を計算できます。ノードへの再帰呼び出しが完了して制御が戻ると、左右のパスの合計が k
150 K と次のようなツリーがあるとします。 -
10 / \ 20 30 / \ / \ 5 35 40 45 / \ / \ 50 55 60 65 / \ / / 70 80 90 100
パス root->left->left の合計が 10 20 5 で、これは 25 であることがわかります。は 150 未満です。プルーニングして 5 を削除する必要があります。その後、10→30→40と評価してみましょう。 150未満なので40を削除します。ここで、別のパス 10->20->35->50 が表示されます。115 の合計は 150 未満なので、50 を削除します。
10->20->35->55->70 ; 10->20->35->55->80 ; 10->30->45->60->90 ; 10->30->45->65->100 ;
すべてのパスの合計が 150 を超えるパスが残っているため、これ以上プルーニングする必要はありません。
例
#include <iostream> using namespace std; class Node { public: int value; Node *left, *right; Node(int value) { this->value = value; left = right = NULL; } }; Node* removeNodesWithPathSumLessThanK(Node* root, int k, int& sum) { if(root == NULL) return NULL; int leftSum, rightSum; leftSum = rightSum = sum + root->value; root->left = removeNodesWithPathSumLessThanK(root->left, k, leftSum); root->right = removeNodesWithPathSumLessThanK(root->right, k, rightSum); sum = max(leftSum, rightSum); if(sum < k) { free(root); root = NULL; } return root; } void printInorderTree(Node* root) { if(root) { printInorderTree(root->left); cout << root->value << " "; printInorderTree(root->right); } } int main() { int k = 150; Node* root = new Node(10); root->left = new Node(20); root->right = new Node(30); root->left->left = new Node(5); root->left->right = new Node(35); root->right->left = new Node(40); root->right->right = new Node(45); root->left->right->left = new Node(50); root->left->right->right = new Node(55); root->right->right->left = new Node(60); root->right->right->right = new Node(65); root->left->right->right->left = new Node(70); root->left->right->right->right = new Node(80); root->right->right->left->left = new Node(90); root->right->right->right->left = new Node(100); int sum = 0; cout << "Inorder tree before: "; printInorderTree(root); root = removeNodesWithPathSumLessThanK(root, k, sum); cout << "\nInorder tree after: "; printInorderTree(root); return 0; }
出力
Inorder tree before: 5 20 50 35 70 55 80 10 40 30 90 60 45 100 65 Inorder tree after: 20 35 70 55 80 10 30 90 60 45 100 65
完全に剪定された木 -
10 / \ 20 30 \ \ 35 45 \ / \ 55 60 65 / \ / / 70 80 90 100
結論
ご覧のとおり、最初の観察後、再帰関数が各呼び出しから返されるときにそのノードの合計を計算することで、DFS を適用してノードを削除できます。全体として、これは観察と方法論に関する単純な問題です。
以上がC++ を使用して、どのパス上にも存在せず、パスの合計が k 未満であるすべてのノードを削除します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Windows 11 には、さまざまなテーマや壁紙など、非常に多くのカスタマイズ オプションがあります。これらのテーマはそれなりに美しいものですが、Windows 11 のバックグラウンドでどのような位置にあるのか疑問に思うユーザーもいます。このガイドでは、Windows 11 テーマの場所にアクセスするさまざまな方法を説明します。 Windows 11 のデフォルトのテーマとは何ですか? Windows 11 のデフォルトのテーマの背景は、空色の背景に咲く抽象的なロイヤル ブルーの花です。この背景は、オペレーティング システムのリリース前の期待のおかげで、最も人気のあるものの 1 つです。ただし、オペレーティング システムには他のさまざまな背景もあります。したがって、Windows 11 デスクトップのテーマの背景はいつでも変更できます。テーマは Windo に保存されます

技術的なエラーのため、このビデオは再生できません。 (エラー コード: 102006) このガイドでは、この一般的な問題に対する簡単な修正を提供し、コーディング作業を続行します。また、Java エラーの原因と、今後それを防ぐ方法についても説明します。 Java の「エラー: メインクラスが見つからないかロードされていません」とは何ですか? Java は、開発者が幅広いアプリケーションを作成できる強力なプログラミング言語です。ただし、その多用途性と効率性には、開発中に発生する可能性のある多くの一般的な間違いが伴います。割り込みの 1 つは、「エラー: メイン クラス user_jvm_args.txt が見つからないかロードされていません」です。これは、Java 仮想マシン (JVM) がプログラムを実行するメイン クラスを見つけられない場合に発生します。このエラーは、次の場合でも障害として機能します。

ファイル パスは、ファイルまたはフォルダーを識別して検索するためにオペレーティング システムによって使用される文字列です。ファイル パスには、パスを区切る 2 つの一般的な記号、つまりスラッシュ (/) とバックスラッシュ () があります。これら 2 つのシンボルは、オペレーティング システムごとに異なる用途と意味を持ちます。スラッシュ (/) は、Unix および Linux システムで一般的に使用されるパス区切り文字です。これらのシステムでは、ファイル パスはルート ディレクトリ (/) から始まり、各ディレクトリ間はスラッシュで区切られます。たとえば、パス /home/user/Document

Win11 の「マイ コンピュータ」パスの違いは何ですか?すぐに見つけられる方法! Windows システムは常に更新されているため、最新の Windows 11 システムにもいくつかの新しい変更と機能が追加されています。よくある問題の 1 つは、Win11 システムでユーザーが「マイ コンピューター」へのパスを見つけられないことですが、これは通常、以前の Windows システムでは簡単な操作でした。この記事では、Win11 システムでの「マイ コンピュータ」のパスの違いと、それらをすばやく見つける方法を紹介します。 Windows1の場合

ツリーでは、「ノードのすべてのペアの最短パスの合計」という用語は、ノードのすべてのペアの個々の最短パスの合計の計算を指します。効果的な方法は、デュアル DFS (深さ優先検索) アルゴリズムを使用することです。選択したノードと他のすべてのノードの間の距離は、最初の DFS パス中に決定されます。ツリーは 2 回目の DFS パス中に再び走査され、各ノードを潜在的な LCA (最下位共通祖先) とみなして、選択された LCA の子孫ノードのペア間の距離の合計を計算します。この方法を使用すると、ツリー内のノードのすべてのペアの最短パスの合計を計算し、理想的な解を確実に得ることができます。 使用される方法 デュアル DFS (深さ優先検索) メソッド ダイナミック プログラミング メソッド ツリーのデュアル DFS (深さ優先検索) メソッド すべて最短経路のペア

Linux システムでは、RPM (RedHatPackageManager) は、ソフトウェア パッケージのインストール、アップグレード、削除に使用される一般的なソフトウェア パッケージ管理ツールです。検索やその他の操作のために、インストールされている RPM ファイルのストレージ パスを見つける必要がある場合があります。以下では、Linux システムで RPM ファイルの保存パスを見つける方法と、具体的なコード例を紹介します。まず、rpm コマンドを使用して、インストールされている RPM パッケージとそのストレージ パスを見つけます。開ける

Python3.x の os.path モジュールを使用してファイル パスのさまざまな部分を取得する方法 日常の Python プログラミングでは、ファイル名、ファイル ディレクトリ、拡張子などの取得など、ファイル パスを操作する必要があることがよくあります。パスの。 Python では、os.path モジュールを使用してこれらの操作を実行できます。この記事では、ファイル操作を改善するために、os.path モジュールを使用してファイル パスのさまざまな部分を取得する方法を紹介します。 os.path モジュールは、一連の

Linux カーネルは、ソース コードが専用のコード リポジトリに保存されているオープン ソース オペレーティング システム カーネルです。この記事では、Linux カーネル ソース コードのストレージ パスを詳細に分析し、読者の理解を助けるために具体的なコード例を使用します。 1. Linux カーネル ソース コードの保存パス Linux カーネル ソース コードは、[https://github.com/torvalds/linux](http) でホストされている linux という Git リポジトリに保存されます。
