// +build ignore,OMIT

package main

import (
	"fmt"

	"code.google.com/p/go-tour/tree"
)

func Walk(root *tree.Tree) *Walker {
	return &Walker{stack: []*frame{{t: root}}}
}

type Walker struct {
	stack []*frame
}

type frame struct {
	t  *tree.Tree
	pc int
}

func (w *Walker) Next() (int, bool) {
	if len(w.stack) == 0 {
		return 0, false
	}

	// continued next slide ...
	// CUT OMIT
	f := w.stack[len(w.stack)-1]
	if f.pc == 0 {
		f.pc++
		if l := f.t.Left; l != nil {
			w.stack = append(w.stack, &frame{t: l})
			return w.Next()
		}
	}
	if f.pc == 1 {
		f.pc++
		return f.t.Value, true
	}
	if f.pc == 2 {
		f.pc++
		if r := f.t.Right; r != nil {
			w.stack = append(w.stack, &frame{t: r})
			return w.Next()
		}
	}
	w.stack = w.stack[:len(w.stack)-1]
	return w.Next()
}

// STOP OMIT

func Same(t1, t2 *tree.Tree) bool {
	w1, w2 := Walk(t1), Walk(t2)
	for {
		v1, ok1 := w1.Next()
		v2, ok2 := w2.Next()
		if v1 != v2 || ok1 != ok2 {
			return false
		}
		if !ok1 {
			return true
		}
	}
}

func main() {
	fmt.Println(Same(tree.New(3), tree.New(3)))
	fmt.Println(Same(tree.New(1), tree.New(2)))
}
