Programming Problems/list, tree
iterative post order traversal of Nary tree
fw93
2018. 4. 22. 15:58
struct Node {
int val;
vector<Node * > children;
}
솔루션 :
recursive 는 원래꺼랑 거의 같다.
class Node{
ArrayList<Node> children;
int val;
}
public static ArrayList<Node> getPostOrder(Node root){
ArrayList<Node> results = new ArrayList<Node>();
if(root == null){
return results;
}
for(Node child : root.children){
results.addAll(getPostOrder(child));
}
results.add(root);
return results;
}
iterative는 스택을 사용하는 듯 이건 preorder인데 inorder이나 postorder은 parent node를 따로 parentstack 등에 담아서 보관했다가, 각 노드별 색깔 같은걸 칠해놓았다가 그 색을 전부 처리했으면 부모를 빼낸다 하는 식으로 작업해야 하겠다( 물론 하지는 않음 ^&^ )
class Node{
ArrayList<Node> children;
int val;
}
public static List<Node> get PostOrder(Node root){
LinkedList<Node> results = new LinkedList<Node>();
if(root == null){
return results;
}
Stack<Node> unprocessed = new Stack<Node>();
unprocessed.push(root);
while(!unprocessed.isEmpty()){
Node node = unprocessed.pop();
results.addFirst(node);
for(Node childNode : node.children){
unprocessed.push(childNode);
}
}
return results;
}
시간 복잡도 : O(N)
공간 복잡도 : O(N)