code kata 230811

This commit is contained in:
VicRen
2023-08-10 11:46:24 +08:00
parent 800a0380b0
commit 51ac462117
8 changed files with 393 additions and 0 deletions
+19
View File
@@ -92,6 +92,21 @@ func postOrder2(n *node) {
}
}
func levelOrder(n *node) {
q := MakeQueue()
q.EnQueue(n)
for !q.IsEmpty() {
p := q.DeQueue().(*node)
visit(p)
if p.left != nil {
q.EnQueue(p.left)
}
if p.right != nil {
q.EnQueue(p.right)
}
}
}
func TestPreOrder(t *testing.T) {
preOrder(makeBinary())
}
@@ -116,6 +131,10 @@ func TestPostOrder2(t *testing.T) {
postOrder2(makeBinary())
}
func TestLevelOrder(t *testing.T) {
levelOrder(makeBinary())
}
func visit(n *node) {
if n == nil {
return
+28
View File
@@ -0,0 +1,28 @@
package main
type Queue []interface{}
func MakeQueue() *Queue {
return &Queue{}
}
func (q Queue) Len() int {
return len(q)
}
func (q Queue) IsEmpty() bool {
return len(q) == 0
}
func (q *Queue) EnQueue(item interface{}) {
*q = append(append(*q, item))
}
func (q *Queue) DeQueue() interface{} {
if (*q).Len() == 0 {
return nil
}
item := (*q)[0]
*q = (*q)[1:len(*q)]
return item
}