zoukankan      html  css  js  c++  java
  • [LeetCode] 257. Binary Tree Paths 二叉树路径

    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"]

    给一个二叉树,返回所有根到叶节点的路径。

    Java:

    /** 
     * Definition for a binary tree node. 
     * public class TreeNode { 
     *     int val; 
     *     TreeNode left; 
     *     TreeNode right; 
     *     TreeNode(int x) { val = x; } 
     * } 
     */  
    public class Solution {  
       public List<String> binaryTreePaths(TreeNode root) {  
            List<String> list = new ArrayList<>();  
            binaryTreePathsHelper(root, list, new String());  
            return list;  
        }  
      
        public void binaryTreePathsHelper(TreeNode root, List<String> list, String string) {  
            if (root == null) {  
                return;  
            }  
            if (root.left == null && root.right == null) {  
                    string = string + root.val;  
                list.add(string);  
                return;  
            }  
      
            binaryTreePathsHelper(root.left, list, string + root.val + "->");  
            binaryTreePathsHelper(root.right, list, string + root.val + "->");  
        }  
    } 

    Python:

    class Solution:
        # @param {TreeNode} root
        # @return {string[]}
        def binaryTreePaths(self, root):
            result, path = [], []
            self.binaryTreePathsRecu(root, path, result)
            return result
        
        def binaryTreePathsRecu(self, node, path, result):
            if node is None:
                return
    
            if node.left is node.right is None:
                ans = ""
                for n in path:
                    ans += str(n.val) + "->"
                result.append(ans + str(node.val))
    
            if node.left:
                path.append(node)
                self.binaryTreePathsRecu(node.left, path, result)
                path.pop()
    
            if node.right:
                path.append(node)
                self.binaryTreePathsRecu(node.right, path, result)
                path.pop()

    C++: DFS

    class Solution {
    public:
        vector<string> binaryTreePaths(TreeNode* root) {
            vector<string> res;
            if (root) dfs(root, "", res);
            return res;
        }
        void dfs(TreeNode *root, string out, vector<string> &res) {
            out += to_string(root->val);
            if (!root->left && !root->right) res.push_back(out);
            else {
                if (root->left) dfs(root->left, out + "->", res);
                if (root->right) dfs(root->right, out + "->", res);
            }
        }
    };
    

    C++:

    class Solution {
    public:
        vector<string> binaryTreePaths(TreeNode* root) {
            if (!root) return {};
            if (!root->left && !root->right) return {to_string(root->val)};
            vector<string> left = binaryTreePaths(root->left);
            vector<string> right = binaryTreePaths(root->right);
            left.insert(left.end(), right.begin(), right.end());
            for (auto &a : left) {
                a = to_string(root->val) + "->" + a;
            }
            return left;
        }
    };
    

     

    类似题目:

    [LeetCode] 112. Path Sum 路径和

    [LeetCode] 113. Path Sum II 路径和 II

    [LeetCode] 437. Path Sum III 路径和 III  

     

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    C++笔记(1)----此运算符函数的参数太多
    算法学习(6)----整数转换为格雷码
    算法学习(5)----二叉树前序、中序、后序遍历互相转换
    算法学习(4)----汉诺塔递归算法和非递归算法
    算法学习(3)----求数组中大小最接近的两个元素的差
    算法学习(2)----丢番图方程
    9.11 Django视图 view和路由
    9.11 Django关于母版语言的灵活用法
    9.10Django模板
    9.9Dajngo MTV
  • 原文地址:https://www.cnblogs.com/lightwindy/p/8628198.html
Copyright © 2011-2022 走看看