すべてのパス257バイナリツリーをleetcode

バイナリーツリー?パスを検索するには!

タイトルは
、バイナリツリー、リーフノードを返すために、ルートノードからのすべてのパスを考えます。
説明:リーフノードは、ノードが子ノードを持たないです。


入力:
-1
- / - \
2から3
-
\ -5
出力:[ "1-> 2-> 5"、「1 - > 3「]
説明:リーフノード・パスへのすべてのルートノード:1- > 2-> 5、1-> 3

トピック分析

  • 出発点:ルートを
  • 終了:リーフノード
  1. ルートから始まります

  2. 新しいノードに到達するために一歩前進してください

  3. ただ、リーフノード缶に現在のノードへのパスを探し

    ==>リーフノードまで、2と3を繰り返して行きます

    再帰!

問題解決のためのアイデア

機能 効果
()を見つけます 再帰関数パスを探し

処理し
現在のノード接合パスを

  • 左と右のサブツリーが空の場合 - 現在のノードがリーフノードである - のパスを見つけるために
  • 左のサブツリーが空でない場合 - リーフノードへのパス、左の子ノードを見つけます
  • 右のサブツリーが空でない場合 - リーフノードへのパス右の子ノードを見つけます

コードは以下の通りです

void find (TreeNode* now,string path, vector<string> &ans)
 {
    string temp = to_string(now->val);
    if(path=="") path = path + temp;                                 //注意路径的开头不用添加 '->'
    else path = path +'-'+'>' + temp;
    if (!now->left && !now->right) ans.push_back(path);              //路径加入答案
    if(now->left) find(now->left,path,ans);
    if(now->right) find(now->right,path,ans);
 }
class Solution {
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        if(!root) return {};
        string path;
        vector<string> ans;
        find(root, path, ans);
        return ans;
    }
};
公開された34元の記事 ウォンの賞賛0 ビュー578

おすすめ

転載: blog.csdn.net/Luyoom/article/details/104825650