257. Binary Tree Paths

Easy

Given the root of a binary tree, return all root-to-leaf paths in any order.

A leaf is a node with no children.

Example 1:

Input: root = [1,2,3,null,5]
Output:
 ["1->2->5","1->3"]

Example 2:

Input: root = [1]
Output:
 ["1"]

Constraints:

  • The number of nodes in the tree is in the range [1, 100].

  • -100 <= Node.val <= 100

解題

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func binaryTreePaths(root *TreeNode) []string {
    if root==nil { return nil }
    
    ans := []string{}
    recursive(root, strconv.Itoa(root.Val), &ans)
    
    return ans
}

func recursive(root *TreeNode, str string, ans *[]string) {
    if root.Left==nil && root.Right==nil {
        *ans = append(*ans, str)
    }
    
    if root.Left!=nil {
        recursive(root.Left, str+"->"+strconv.Itoa(root.Left.Val), ans)
    }
    if root.Right!=nil {
        recursive(root.Right, str+"->"+strconv.Itoa(root.Right.Val), ans)
    }
}

或是下面這個寫法,和上面邏輯完全相同,但是將recursive function 寫成函式內的變數,比較漂亮且不需要傳遞指針。

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func binaryTreePaths(root *TreeNode) []string {
    if root==nil { return nil }
    
    ans := []string{}
    
    var recursive func(*TreeNode, string) 
    recursive = func(root *TreeNode, str string) {
        if root.Left==nil && root.Right==nil {
            ans = append(ans, str)
        }
        
        if root.Left!=nil {
            recursive(root.Left, str+"->"+strconv.Itoa(root.Left.Val))
        }
        
        if root.Right!=nil {
            recursive(root.Right, str+"->"+strconv.Itoa(root.Right.Val))
        }
    }
    
    recursive(root, strconv.Itoa(root.Val))
    
    return ans
}

Last updated