트리는 계층적인(hierarchical) 트리 구조를 시뮬레이션하기 위한 자주 사용되는 데이터 구조임
최상위 노드는 root라 부름
트리는 노드로 구성되어 있고, 부모(parent), 자식(child) 노드로 구분됨
이진 트리에서 한 노드에 2개 자식 노드를 갖을 수 있음
노드 예시 그림
2) iteratively
/**
* 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) {}
* };
*/
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if(root==NULL)return res;
stack<TreeNode*> st;
st.push(root);
while(!st.empty()){
TreeNode* pre_node = st.top();
res.push_back(pre_node->val);
st.pop();
if(pre_node->right)
st.push(pre_node->right);
if(pre_node->left)
st.push(pre_node->left);
}
return res;
}
};
2) iteratively
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
if(!root) return res;
stack<TreeNode *> st;
TreeNode* pre_node = root;
while(!st.empty()||pre_node){
if(pre_node){
st.push(pre_node);
pre_node= pre_node->left;
}
else{
TreeNode* temp = st.top();
res.push_back(temp->val);
st.pop();
pre_node=temp->right;
}
}
return res;
}
2) iteratively
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
if(!root) return res;
stack<TreeNode *> st;
TreeNode* pre_node=root;
TreeNode* last = NULL;
while(!st.empty()||pre_node){
if(pre_node){
st.push(pre_node);
pre_node=pre_node->left;
}
else{
TreeNode* temp = st.top();
if(temp->right&& last!= temp->right){
pre_node = temp->right;
}
else{
res.push_back(temp->val);
st.pop();
last = temp;
}
}
}
return res;
}
참고