leetcode.com/problems/deepest-leaves-sum/
๊ฐ์ฅ ์๋์ ์๋ ๋ ธ๋๋ค์ value๊ฐ์ ํฉํ๋ ๋ฌธ์ ๋ค.
'์ฒ์๋ถํฐ ๋๋ฌด ๋ง์ ์๊ฐ์ ํ์ง ๋ง์!'๊ณ ๊ฒฐ์ฌํ๊ณ ์ ๋ง ๋ ์ค๋ฅด๋ ๋๋ก ๋ฌธ์ ๋ฅผ ํ์๋๋ ํต๊ณผ๋ ํ๋๋ฐ ์ ์ํ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค ใ ใ ใ
Solution
๋๋ฆ์ BFS๋ก ๊ฐ์ฅ ์๋์ ๋ ธ๋๊ฐ ๋ช depth์ ์๋์ง ์ฐพ๊ณ , ๋ค์ ํ๋ฒ Queue๋ฅผ ๋๋ฆฌ๋ฉด์ ํด๋น depth์ ์ํ๋ ๋ ธ๋๋ค์ val์ ๋ํ๋ ํ์ด๋ฒ์ ์ฌ์ฉํ๋ค.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int deepestLeavesSum(TreeNode root) {
int depth = 0;
Queue<Node> que = new LinkedList<>();
que.add(new Node(root, 0));
Node tmp;
TreeNode right_node;
TreeNode left_node;
while(!que.isEmpty()){
tmp = que.poll();
depth = Math.max(depth, tmp.cnt);
right_node = tmp.treeNode.right;
if(right_node !=null) que.add(new Node(right_node,tmp.cnt+1));
left_node = tmp.treeNode.left;
if(left_node !=null) que.add(new Node(left_node,tmp.cnt+1));
}
//while์์ ๋น ์ ธ๋์จ depth๊ฐ ๊ฐ์ฅ ๊น์ ๊ธธ์ด
que.clear();
que.add(new Node(root, 0));
int total_sum = 0;
while(!que.isEmpty()){
tmp = que.poll();
if(tmp.cnt==depth) total_sum += tmp.treeNode.val;
right_node = tmp.treeNode.right;
if(right_node !=null) que.add(new Node(right_node,tmp.cnt+1));
left_node = tmp.treeNode.left;
if(left_node !=null) que.add(new Node(left_node,tmp.cnt+1));
}
return total_sum;
}
public static class Node{
TreeNode treeNode;
int cnt;
public Node(TreeNode treeNode, int cnt){
this.treeNode = treeNode;
this.cnt = cnt;
}
}
}
๋ค๋ฅธ ์ฌ๋์ Solution
leetcode.com/problems/deepest-leaves-sum/discuss/463239/JavaC%2B%2BPython-Level-Traversal
ใฑ ใ ฃ๋ฅ์ฐจ๋ค ์ ๋ง
๋ง์ง๋ง ๋ ธ๋์ธ ๊ฒฝ์ฐ์๋ ๋ด right๊ณผ left๊ฐ ๋ชจ๋ null์์ ์ด์ฉํ์ฌ์ ํ์๋ค. ์ฒ์ ๋๋ ์ด ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค๊ฐ ์๋์ Node 5์ ๊ฐ์ด ๋ง์ง๋ง ๋ ธ๋๋ ์๋๋ฐ ์์ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ ์ด๋กํ์ง? ๋ผ๋ ์๊ฐ์ ๊ฐ์ฅ ๋จ์ ๋ฌด์ํ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ธฐ๋ก ๋๋ฆฐ ๊ฑฐ์๋๋ฐ que.size()๋ฅผ ์ด์ฉํ๋ฉด ๋์๋ ๊ฑฐ์๋ค.
์ด์ฐจํผ root๋ถํฐ ์์ํ๋ฉด์ ๊ฐ์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋๋ค์ while๋ฌธ ์์์ ๊ฐ์ด que์ ๋ค์ด๊ฐ๊ฒ ๋์ด์๋ค. ์ฆ, que.size()๋ก ๋์ค๋ ๊ฐ์ด ๊ฐ์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋๋ค์ ๊ฐฏ์์ธ ๊ฒ. ๊ทธ ํ์๋งํผ์ for๋ฌธ์ผ๋ก ๋๋ฉด์ total_sum์ ๋ํด์ฃผ๋ฉด ๊ฐ์ ๋์จ๋ค. ์์ด๋์ด๋ฅผ ์ฐธ๊ณ ํ ์ฌ๋์ ๊ฒฝ์ฐ์๋, for๋ฌธ์์ ์์ res(๋ด ์ฝ๋๋ก ์น๋ฉด total_sum)์ 0์ผ๋ก ์ด๊ธฐํํด์ฃผ๋๋ฐ ์ ์ด๊ฒ๋ ๋ํํ ์ ๋ฐํ๋ค.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int deepestLeavesSum(TreeNode root) {
int total_sum = 0;
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
while (!que.isEmpty()){
total_sum = 0;
for(int i= que.size()-1;i>=0;i--){
TreeNode node = que.poll();
total_sum += node.val;
if(node.left!=null) que.add(node.left);
if(node.right!=null) que.add(node.right);
}
}
return total_sum;
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ] Leetcode 1332 - Remove Palindromic Subsequences (0) | 2021.03.09 |
---|---|
[์๋ฐ] ๋ฆฌํธ์ฝ๋ 706 - Design HashMap (0) | 2021.03.07 |
[์๋ฐ] Leetcode 637 - Average of Levels in Binary Tree (0) | 2021.03.05 |
[์๋ฐ] Leetcode 268 - Missing Number (0) | 2021.03.04 |
[์๋ฐ] Leetcode 234 - Palindrome Linked List (0) | 2021.03.01 |