leet-129-sum-root-to-leaf-numbers
각 노드는 1~9,0으로 되어있고 루트~리프 까지의 숫자들을 모아 1개의 숫자를 만든다. 각 leaf마다 숫자가 만들어지는데, 이 숫자들의 합을 구하라.
걍 DFS로 Leaf까지 도달했을 때 결과값을 누적하면된다.
재귀함수
task : 각 노드를 방문하여 전달받은 숫자 끝에 해당 노드 숫자를 뒤에 추가한다.
이 task를 Left, Right로 재귀 방문
base case
현재 방문한 노드의 left와 right가 null일 경우 값을 누적한다.
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int result;
// leaf노드까지 움직이며, 도달할 경우 string 완성
// string 완성될 경우, str -> int해서 sum에 계속 누적
void moveNode(TreeNode* node, string num) {
// basecase
if(node == NULL) {
return;
}
if(node->left == NULL && node->right == NULL) {
char chNum = (node->val + '0');
int realNum = stoi(num + chNum);
// cout<<realNum<<endl;
this->result += realNum;
return;
}
char chNum = (node->val + '0');
moveNode(node->left, num + chNum);
moveNode(node->right, num + chNum);
}
int sumNumbers(TreeNode* root) {
moveNode(root, "");
// cout<<"realNum: "<<this->result<<endl;
return this->result;
}
};
배운거
숫자를 뒤에 계속 붙여주는건 string을 이용하여, "" + (char)가 편하다.
string to int는
stoi
를 사용.int to char는 (char) + '0' 을 사용하는게 맘편함
Last updated
Was this helpful?