dev/algorithm
BOJ / 1991๋ฒ / ํธ๋ฆฌ ์ํ [Go][Python3]
crscnt
2021. 3. 25. 21:00
๐ฉ๐ป๐ป ๋ฌธ์
1991๋ฒ: ํธ๋ฆฌ ์ํ
์ฒซ์งธ ์ค์๋ ์ด์ง ํธ๋ฆฌ์ ๋ ธ๋์ ๊ฐ์ N(1≤N≤26)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ๋ ธ๋์ ๊ทธ์ ์ผ์ชฝ ์์ ๋ ธ๋, ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๊ฐ ์ฃผ์ด์ง๋ค. ๋ ธ๋์ ์ด๋ฆ์ A๋ถํฐ ์ฐจ๋ก๋๋ก ์๋ฌธ์
www.acmicpc.net
โ๐ป ํ์ด
๐จ Go
// https://www.acmicpc.net/problem/1991
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n int
fmt.Fscanln(reader, &n)
var nodes = map[string]*Node{}
for i := 0; i < n; i++ {
var nodeName, leftNodeName, rightNodeName string
fmt.Fscanln(reader, &nodeName, &leftNodeName, &rightNodeName)
node := new(Node)
if nodes[nodeName] != nil {
node = nodes[nodeName]
} else {
node.setName(nodeName)
nodes[nodeName] = node
}
if leftNodeName != "." {
leftNode := new(Node)
leftNode.setName(leftNodeName)
node.setLeftChild(leftNode)
nodes[leftNodeName] = leftNode
}
if rightNodeName != "." {
rightNode := new(Node)
rightNode.setName(rightNodeName)
node.setRightChild(rightNode)
nodes[rightNodeName] = rightNode
}
}
fmt.Fprintln(writer, preOrder(nodes["A"], ""))
fmt.Fprintln(writer, inOrder(nodes["A"], ""))
fmt.Fprintln(writer, postOrder(nodes["A"], ""))
}
type Node struct {
name string
leftNode *Node
rightNode *Node
}
func (n *Node) setLeftChild(l *Node) {
n.leftNode = l
}
func (n *Node) setRightChild(r *Node) {
n.rightNode = r
}
func (n *Node) setName(name string) {
n.name = name
}
func preOrder(startNode *Node, printStr string) string {
printStr += startNode.name
if startNode.leftNode != nil {
printStr = preOrder(startNode.leftNode, printStr)
}
if startNode.rightNode != nil {
printStr = preOrder(startNode.rightNode, printStr)
}
return printStr
}
func inOrder(startNode *Node, printStr string) string {
if startNode.leftNode != nil {
printStr = inOrder(startNode.leftNode, printStr)
}
printStr += startNode.name
if startNode.rightNode != nil {
printStr = inOrder(startNode.rightNode, printStr)
}
return printStr
}
func postOrder(startNode *Node, printStr string) string {
if startNode.leftNode != nil {
printStr = postOrder(startNode.leftNode, printStr)
}
if startNode.rightNode != nil {
printStr = postOrder(startNode.rightNode, printStr)
}
printStr += startNode.name
return printStr
}
๐จ Python3
# https://www.acmicpc.net/problem/1991
import sys
class Node():
def __init__(self, name, left, right):
self.name = name
self.left = left
self.right = right
def preorder(node):
print(node.name, end="")
if node.left != ".":
preorder(nodes[node.left])
if node.right != ".":
preorder(nodes[node.right])
def inorder(node):
if node.left != ".":
inorder(nodes[node.left])
print(node.name, end="")
if node.right != ".":
inorder(nodes[node.right])
def postorder(node):
if node.left != ".":
postorder(nodes[node.left])
if node.right != ".":
postorder(nodes[node.right])
print(node.name, end="")
nodes = {}
if __name__ == "__main__":
n = int(sys.stdin.readline())
for i in range(n):
node_name, left_name, right_name = sys.stdin.readline().split()
nodes[node_name] = Node(node_name, left_name, right_name)
preorder(nodes["A"])
print()
inorder(nodes["A"])
print()
postorder(nodes["A"])
728x90