반응형
https://leetcode.com/problems/increasing-order-search-tree/description/
tree 순회 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
중위 순회를 저장할 배열을 선언해줍니다. 또한 새롭게 배열된 TreeNode를 반환할 정답 변수를 선언해 줍니다.
📔 풀이과정
1. 중위순회(in order)를 수행해 각 node의 원소값들을 list형 자료구조에 저장해줍니다.
2. 해당 list에 존재하는 원소들을 모두 순회하며 오른쪽 자식에 새로운 TreeNode를 만들어 값을 해당 원소로 채워줍니다.
3. 채워진 새로운 TreeNode를 오른쪽 자식으로 연결해줍니다.
📕 Code
📔 C++
/**
* 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:
void inOrder(TreeNode* root, vector <int> &nodes) {
if(root == NULL) return;
inOrder(root->left, nodes);
nodes.push_back(root->val);
inOrder(root->right, nodes);
}
TreeNode* increasingBST(TreeNode* root) {
vector <int> nodes;
inOrder(root, nodes);
TreeNode *ans = new TreeNode();
TreeNode *cur = ans;
for(auto node : nodes) {
TreeNode *newNode = new TreeNode(node);
cur -> right = newNode;
cur = cur -> right;
}
return ans->right;
}
};
📔 Rust
// Definition for a binary tree node.
// #[derive(Debug, PartialEq, Eq)]
// pub struct TreeNode {
// pub val: i32,
// pub left: Option<Rc<RefCell<TreeNode>>>,
// pub right: Option<Rc<RefCell<TreeNode>>>,
// }
//
// impl TreeNode {
// #[inline]
// pub fn new(val: i32) -> Self {
// TreeNode {
// val,
// left: None,
// right: None
// }
// }
// }
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
pub fn in_order(root: Option<Rc<RefCell<TreeNode>>>, nodes: &mut Vec<i32>) {
if let Some(node) = root {
Self::in_order(node.borrow().left.clone(), nodes);
nodes.push(node.borrow().val);
Self::in_order(node.borrow().right.clone(), nodes);
}
}
pub fn increasing_bst(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> {
let mut nodes = vec![];
Self::in_order(root, &mut nodes);
let mut ans = Rc::new(RefCell::new(TreeNode::new(0)));
let mut cur = ans.clone();
for node in nodes {
cur.borrow_mut().right = Some(Rc::new(RefCell::new(TreeNode::new(node))));
let next = cur.borrow().right.as_ref().unwrap().clone();
cur = next;
}
let ans = ans.borrow().right.clone();
ans
}
}
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > 자료구조' 카테고리의 다른 글
(C++, Rust) - LeetCode (easy) 933. Number of Recent Calls (0) | 2023.09.06 |
---|---|
(C++, Rust) - LeetCode (easy) 905. Sort Array By Parity (0) | 2023.08.24 |
(C++) - LeetCode (easy) 222. Count Complete Tree Nodes (0) | 2023.08.16 |
(C++) - LeetCode (easy) 884. Uncommon Words from Two Sentences (0) | 2023.08.11 |
(C++) - LeetCode (easy) 771. Jewels and Stones (0) | 2023.07.12 |