분류 전체보기 422

[👍][BinaryTree][Medium] 98. Validate Binary Search Tree

https://leetcode.com/problems/validate-binary-search-tree/description/ 주어진 tree가 유효한 이진 트리인지 판단하라. 우선 이진 트리에 조건을 생각해 볼 필요가 있다. 위 그림처럼, node값은 늘, left 와 right 의 사이 값을 가져야 한다.이 문제가 child 가 생기면 복잡해 진다. 위 그림처럼, 노드에서 조건을 만족해도 전체 트리에서는 만족하지 않게 될 수 있다. 즉, 정리하면 특정 노드 기준으로 left node 중 최대값, right node 중 최소값 사이에 노드값이 존재해야 한다. 따라서 특정 노드에서 모든 차일드 노드를 순회해서 left의 최대값, right의 최소값 을 구한 후 현재 노드가 이 값 사이에 있나 확인한다. ..

Leetcode/NeetCode 2024.07.18

[BinaryTree][Medium] 1448. Count Good Nodes in Binary Tree

https://leetcode.com/problems/count-good-nodes-in-binary-tree/description/ 주어진 Binary Tree에서 good node의 수를 찾아라. good node는 root와 해당 노드 사이에 자신보다 큰 수가 없어야 한다. 특정 노드를 기준으로 root와 자신 사이에 max value를 구한다. 이 값이 node->val 보다 같거나 작으면 조건을 만족하는 것이다.  노드의 중복 탐색을 피하기 위해 자신을 포함하여 max value를 재 계산하고 다시 child로 내려가 조건 검사를 이어 간다.  코드 더보기void goodNodesHelper(int& cnt, int maxV, TreeNode* node){ if (node == nullpt..

Leetcode/NeetCode 2024.07.18

[BinaryTree][Medium] 199. Binary Tree Right Side View

https://leetcode.com/problems/binary-tree-right-side-view/description/ 주어진 tree의 각 level의 마지막 값을 구하라.   level order traversal을 한 후 제일 마지막 값만을 취한다. 코드더보기vector rightSideView(TreeNode* root) { vector vRet; if (root == nullptr) return vRet; queue qBuff; qBuff.push(root); while (qBuff.size() > 0) { int cnt = qBuff.size(); for (int q = 0; q val); ..

Leetcode/NeetCode 2024.07.18

[BinaryTree][Medium] 102. Binary Tree Level Order Traversal

https://leetcode.com/problems/binary-tree-level-order-traversal/description/ 주어진 binary tree를 level order 탐색하라. 사실상 easy 난이도 문제.BS의 기본 문제, 다른 문제들로 응용에 잘 나옴.  코드 더보기vector> levelOrder(TreeNode* root) { vector> vRet; if (root == nullptr) return vRet; queue qBuff; qBuff.push(root); while (qBuff.size() > 0) { vector vBuff; int cnt = qBuff.size(); for (in..

Leetcode/NeetCode 2024.07.18

[BinaryTree][Medium] 235. Lowest Common Ancestor of a Binary Search Tree

https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/ 주어진 트리에서 두개의 target 노드 중, 가장 낮은 위치의 공통 부모 노드를 찾아라. 특정 노드간의 경로를 우선 기록한다. 그리고 두 노드 경로를 비교해서 달라지기 시작하면, 그 바로 직전 노드가 가장 낮은 공통 부모다.  코드.더보기bool collectPathToNode(TreeNode* node, TreeNode* target, vector& vBuff){ if (node == nullptr) return false; vBuff.push_back(node); if (node == target) ..

Leetcode/NeetCode 2024.07.17

[BinaryTree][Easy] 572. Subtree of Another Tree

https://leetcode.com/problems/subtree-of-another-tree/description/ 주어진 두개의 tree가 있을 때, 하나의 트리중 일부가 다른 트리와 동일한지 판단하라. 모든 노드에 대해 subRoot tree와 같은지 비교하면 될 것이다.  이러면 두번 돌게 되는데...  단일 pass에 모두 처리하는 방법에 대해 고민 필요. 코드. 더보기void isSameTreeHelper(TreeNode* nodeA, TreeNode* nodeB, bool& same){ if (!same) return; if (nodeA == nullptr && nodeB == nullptr) return; if ((nodeA == nullptr && nod..

Leetcode/NeetCode 2024.07.17

[BinaryTree][Easy] 100. Same Tree

https://leetcode.com/problems/same-tree/description/ 주어진 두개의 트리가 동일한지 확인하라.  두 트리의 원소의 모든 값을 대조한다. 코드더보기void isSameTreeHelper(TreeNode* nodeA, TreeNode* nodeB, bool& same){ if(!same) return; if(nodeA==nullptr && nodeB==nullptr) return; if((nodeA==nullptr && nodeB!=nullptr) || (nodeA!=nullptr && nodeB==nullptr)) { same = false; return; } if(nodeA->val != n..

Leetcode/NeetCode 2024.07.17

[BinaryTree][Easy] 110. Balanced Binary Tree

https://leetcode.com/problems/balanced-binary-tree/description/ 주어진 이진트리가 balanced binary tree인지 판단하라.  balanced 이진트리가 정확하게 무엇인지 먼저 재정의 해 보자. 특정 노드 기준으로 depth차가 최대 1이어야 한다. 다음 그림에서 dv 가  특정 노드에서 depth차를 의미한다.  아래 노드는 B 노드가 dv 2로 만족하지 않는다.  따라서 특정 노드에서 양 child 최대 depth를 구하고 그 차가 1보다 같거나 작은지 판단한다.  코드.더보기int isBalancedDFS(bool& isBalanced, TreeNode* node){ if (!isBalanced) return isBalan..

Leetcode/NeetCode 2024.07.17

[BinaryTree][Easy] 543. Diameter of Binary Tree

https://leetcode.com/problems/diameter-of-binary-tree/description/  주어진 tree의 최대 diameter 길이를 구하라.diameter란 두 leaf 노드 간 최대 거리를 말하며, 이는 root를 거치지 않을 수 있다. 특정 노드를 기준으로 left child와 right child의 max count가 diameter가 된다. 이 diameter를 모든 노드 기준으로 구하고, 그 중 max 값을 반환한다.  문제는 이 연산을 child count를 구하는 것과 (최적화를 위해) 동시에 처리해야 한다는 것이다.이것으로 Easy보다는 Medium에 가까운 문제.  코드 더보기int diameterOfBinaryTreeDFS(int& maxDiamete..

Leetcode/NeetCode 2024.07.17

[BinaryTree][Easy] 104. Maximum Depth of Binary Tree

https://leetcode.com/problems/maximum-depth-of-binary-tree/description/ 주어진 binary tree의 최대 depth 를 구하라.  DFS 식으로 최대 depth를 카운팅 한다. 코드  int maxDepthDFS(TreeNode* node){ if (node == nullptr) return 0; int left = maxDepth(node->left) + 1; int right = maxDepth(node->right) + 1; return max(left, right);}int maxDepth(TreeNode* root) { return maxDepthDFS(root);}  결과

Leetcode/NeetCode 2024.07.17