Q. 주어진 binary tree를 linked list와 같은 flatten 하여라.
이때 tree를 pre-order 순회한 결과를 flatten 하여라.
Solution
Tree 에 대한 이해가 충분하면 역시 어렵지 않으리라 생각된다.
우선 tree를 pre order 순회하면서 그 결과를 특정 버퍼에 넣고,
버퍼를 순서대로 순회하면서 오른쪽 leaf 에만 child 를 attach 한다.
로직대로 코드를 만들어 본다.
더보기
// vector를 순회하며 우측에만 child를 attach 한다.
TreeNode* build_flatten(vector<TreeNode*>& vNodes, int& idx)
{
if (idx >= vNodes.size())
return NULL;
TreeNode* node = vNodes[idx++];
node->left = NULL;
node->right = build_flatten(vNodes, idx);
return node;
}
void flatten_preorder(TreeNode* node, vector<TreeNode*>& vNodes)
{
if (node == NULL) return;
vNodes.push_back(node);
if (node->left != NULL) flatten_preorder(node->left, vNodes);
if (node->right != NULL) flatten_preorder(node->right, vNodes);
}
public:
void flatten(TreeNode* root)
{
if(root == NULL) return;
vector<TreeNode*> vNodes;
flatten_preorder(root, vNodes);
int idx = 0;
build_flatten(vNodes, idx);
}
적절한 결과를 얻었다.
'Leetcode > Top 100 Liked' 카테고리의 다른 글
[Binary Tree][Medium] 230. Kth Smallest Element in a BST (0) | 2024.03.14 |
---|---|
[Binary Tree][Easy] 226. Invert Binary Tree (0) | 2024.03.14 |
[Binary Tree][Easy] 108. Convert Sorted Array to Binary Search Tree (1) | 2024.03.13 |
[Binary Tree][Easy] 104. Maximum Depth of Binary Tree (0) | 2024.03.12 |
[Binary Tree][Medium] 102. Binary Tree Level Order Traversal (0) | 2024.03.09 |