leetcode_257.二叉樹的所有路徑(遞歸&字符串)

題目

原題鏈接

給定一個二叉樹,返回所有從根節點到葉子節點的路徑。

說明: 葉子節點是指沒有子節點的節點。

示例:

輸入:

   1
 /   \
2     3
 \
  5

輸出: ["1->2->5", "1->3"]

解釋: 所有根節點到葉子節點的路徑爲: 1->2->5, 1->3

思路

首先,定義一個遞歸函數,該函數有兩個參數,一個是當前節點的指針,另一個是已經記錄了從根節點的當前節點路徑的字符串。

每次將該節點的值加入字符串的末尾後,進行如下操作:

——如果是葉子節點,啥都別幹,直接將該路徑壓入返回的字符串容器內。

——如果不是葉子節點,字符串末尾加入一個 “->” ,指向下一個節點。

以下是代碼(附贈註釋):

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<string> ans;
    vector<string> binaryTreePaths(TreeNode* root) {
        digit(root, "");
        return ans;
    }

    void digit(TreeNode* node, string path) {
        if(!node) return; //如果爲空
        path += to_string(node -> val); //路徑加入該節點的值
        if(!node -> left && !node -> right) //如果是葉子節點 
            ans.push_back(path); //推入這條路徑
        else { //不是葉子節點就繼續遞歸
            path += "->";
            digit(node -> left, path);
            digit(node -> right, path);
        }
    }
注:這個思路要將一個數值轉變爲字符串,我這裏是用了to_string函數,該函數的作用是將一個數值轉換爲字符串,並返回它。
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章