Skip to content

Commit

Permalink
remove
Browse files Browse the repository at this point in the history
  • Loading branch information
Yu Zhao committed May 22, 2018
1 parent fe13e2a commit a7de29f
Showing 1 changed file with 48 additions and 5 deletions.
53 changes: 48 additions & 5 deletions ch10/bst.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ func main() {
fmt.Println("min: ", tree.Min())
fmt.Println("max: ", tree.Max())
fmt.Println("isBST: ", tree.IsBST())
tree.Remove(4)
tree.InOrderTraversePrint()
tree.Remove(7)
tree.InOrderTraversePrint()
tree.Remove(1)
tree.InOrderTraversePrint()
}

type Node struct {
Expand Down Expand Up @@ -79,6 +85,10 @@ func search(n *Node, val int) bool {

func (tree *Tree) Min() int {
node := tree.root
return min(node)
}

func min(node *Node) int{
for node.left != nil {
node = node.left
}
Expand All @@ -87,6 +97,10 @@ func (tree *Tree) Min() int {

func (tree *Tree) Max() int {
node := tree.root
return max(node)
}

func max(node *Node) int {
for node.right != nil {
node = node.right
}
Expand Down Expand Up @@ -119,14 +133,43 @@ func isBST(n *Node) bool {
}

func (tree *Tree) IsBST1() bool {
// use infix traverse
return false
}

func (tree *Tree) IsBST2() bool {
return false
func (tree *Tree) Remove(val int) {
node := tree.root
tree.root = remove(node, val)
}

func remove(node *Node, val int) *Node {
if node.value == val {
// fmt.Printf("%v == %v\n", node.value, val)
left := node.left
right := node.right

if left == nil && right == nil {
// fmt.Println("return nil")
node = nil
} else if left == nil {
root := min(node.right)
// fmt.Printf("--> remove right %v\n", root)
node.right = remove(node.right, root)
node.value = root
} else {
root := max(node.left)
// fmt.Printf("--> remove left %v\n", root)
node.left = remove(node.left, root)
node.value = root
}
} else if node.value < val {
// fmt.Printf("%v < %v\n", node.value, val)
node.right = remove(node.right, val)
} else {
// fmt.Printf("%v > %v\n", node.value, val)
node.left = remove(node.left, val)
}
return node
}

func (tree *Tree) Remove(val int) bool {
return false
}

0 comments on commit a7de29f

Please sign in to comment.