N

(Leet Code c++)Binary Tree Paths 본문

Leet Code 알고리즘

(Leet Code c++)Binary Tree Paths

naeunchan 2021. 7. 29. 15:01
728x90
반응형

257. Binary Tree Paths

Easy

2876145Add to ListShare

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

주어진 이진 트리의 리프 노드 경로를 모두 리턴해야 한다.

 

루트가 NULL인지 확인하여 dfs 실행.

dfs를 통해 들어온 현재 노드의 리프 노드인지 확인한다.

 

node->left와 node->right가 모두 NULL 인 경우 리프 노드이기 때문에

(현재까지의 노드 경로) + (현재 노드의 번호)를 리턴한다.

 

리프노드가 아닌 경우,

왼쪽 자식 또는 오른쪽 자식을 방문해 리프 노드일 때까지 dfs를 실행한다.

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<string> answer;
    
    void dfs(TreeNode * node, string current){
        string s = to_string(node->val);
        
        if(node->left == NULL && node->right == NULL){
            answer.push_back(current + s);
            return;
        }
        
        if(node->left != NULL){
            dfs(node->left, current + s + "->");
        }
        
        if(node->right != NULL){
            dfs(node->right, current + s + "->");
        }
        
        return;
    }
    
    vector<string> binaryTreePaths(TreeNode* root) {
        if(root != NULL){
            dfs(root, "");
        }
        
        return answer;
    }
};
728x90
반응형