题目:
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \ 2 3 \ 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
题解:
递归。
C++版:
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> results;
if(root == NULL)
return results;
string result = to_string(root->val);
if(root->left == NULL && root->right == NULL) {
results.push_back(result);
return results;
}
traverse(root->left, results, result);
traverse(root->right, results, result);
return results;
}
void traverse(TreeNode* root, vector<string>& results, string result) {
if(root == NULL)
return;
if(root->left == NULL && root->right == NULL) {
result += "->";
result += to_string(root->val);
results.push_back(result);
return;
}
result += "->";
result += to_string(root->val);
traverse(root->left, results, result);
traverse(root->right, results, result);
}
};
Java版:
public class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> results = new ArrayList<>();
if(root == null)
return results;
StringBuffer result = new StringBuffer(Integer.toString(root.val));
if(root.left == null && root.right == null) {
results.add(result.toString());
return results;
}
traverse(root.left, results, result);
traverse(root.right, results, result);
return results;
}
public void traverse(TreeNode root, List<String> results, StringBuffer result) {
if(root == null)
return;
if(root.left == null && root.right == null) {
StringBuffer temp = new StringBuffer(result.toString());
temp.append("->");
temp.append(Integer.toString(root.val));
results.add(temp.toString());
return;
}
StringBuffer temp = new StringBuffer(result.toString());
temp.append("->");
temp.append(Integer.toString(root.val));
traverse(root.left, results, temp);
traverse(root.right, results, temp);
}
}
Python版:
class Solution:
# @param {TreeNode} root
# @return {string[]}
def binaryTreePaths(self, root):
if root == None:
return []
results, result = [], str(root.val)
if root.left == None and root.right == None:
results.append(result)
return results
self.traverse(root.left, results, result)
self.traverse(root.right, results, result)
return results
def traverse(self, root, results, result):
if root == None:
return
if root.left == None and root.right == None:
temp = result
temp += ("->" + str(root.val))
results.append(temp)
temp = result
temp += ("->" + str(root.val))
self.traverse(root.left, results, temp)
self.traverse(root.right, results, temp)