給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。
說明:葉子節點是指沒有子節點的節點。
示例:
輸入:
1/ \
2 3
\ 5
輸出: ["1->2->5", "1->3"]
解釋: 所有根節點到葉子節點的路徑為: 1->2->5, 1->3
首先要寫一下我自己的錯誤的思路:利用回溯,到了葉子結點後將當前遍歷到的一位陣列加入到要返回的二維陣列中,當然最後因為題目要求輸出的是上邊的鍊錶形式,所以我們再重新格式化一下(比較麻煩),**如下:
class solution
helper(res, path, root);
reformat(res);
return res;
}void helper(vector&res, string &path,treenode *root)
path += root->val + '0';
if (!root->left && !root->right)
helper(res, path, root->left);
helper(res, path, root->right);
path.pop_back();
} //轉化為要求的格式
void reformat(vector&res)
}
//單個字串的轉換
string try(string s)
for (int i = 0;i < tmp.size();i++)
return res.substr(0, res.size() - 2);
}};
簡單的樣例都跑過了,但無奈submit後顯示207/209 cases通過,希望有懂的幫忙看一下是**出了漏洞。
下面是參考的別人的解法,重點是不需要回溯,而是不斷的開闢分支(因為若給出兩個路徑,如果一旦其中有乙個節點不同,那麼它們兩個就是不同的),我們從根節點開始,如果遇到了葉子結點就只加上當前節點並將一維陣列壓入,否則遍歷左右子樹,並加入node->val+"->",簡潔易懂,**如下:
class solution
helper(res, "", root);
return res;
}void helper(vector&res,string path,treenode *node)
if (node->left)
if (node->right)
}
};
LeetCode257 二叉樹的所有路徑
好多天沒寫演算法了,好多天也不更了。今天開始繼續啊,加油!先來乙個簡單的二叉樹練練手哈 給定乙個二叉樹,返回從根節點到葉節點的所有路徑。例如,給定以下二叉樹 1 2 3 5所有根到葉路徑是 1 2 5 1 3 二叉樹先序遍歷一下,遞迴把節點值挨個加入就好了 definition for a bina...
leetcode 257 二叉樹的所有路徑
給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。說明 葉子節點是指沒有子節點的節點。示例 輸入 1 2 3 5 輸出 1 2 5 1 3 解釋 所有根節點到葉子節點的路徑為 1 2 5,1 3 definition for a binary tree node.struct treenode cl...
LeetCode 257 二叉樹的所有路徑
257.二叉樹的所有路徑 給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。說明 葉子節點是指沒有子節點的節點。示例 輸入 1 2 3 5輸出 1 2 5 1 3 解釋 所有根節點到葉子節點的路徑為 1 2 5,1 3解題思路 在求解二叉樹相關問題時,一般用遞迴求解。注意用遞迴解題的過程中,思路一定...