[LeetCode By Go 86]257. Binary Tree Paths

1484 단어

제목.


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

문제풀이의 방향


역귀환 문제를 풀고 역귀환 과정에서 현재의 경로를 기록하고 잎 노드를 찾은 후 경로를 결과 수조에 넣는다. 역귀환 과정에서 다음과 같다.
  • 좌우 서브노드가 모두 빈 지침이라면 현재 노드가 두 갈래 나무의 잎사귀라는 것을 설명하고 하나의 경로를 얻어 이 경로를 결과 수조에 넣는다
  • 그렇지 않으면 좌우 서브노드가 비어 있는지 판단하고 비어 있지 않으면 귀속하여 그 경로를 계속 찾는다
  • 코드

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

    좋은 웹페이지 즐겨찾기