LeetCode 题解(180): Binary Tree Paths

来源:互联网 发布:ubuntu 15.04 下载 编辑:程序博客网 时间:2024/06/05 14:18

题目:

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)

0 0
原创粉丝点击