数据结构与算法--树

golang版本
package main

import (
	"fmt"
)

type Node struct {
	value int
	left *Node
	right *Node
}

func newNode(value int) *Node{
	return &Node{
		value: value,
		left:  nil,
		right: nil,
	}
}

type Tree struct {
	root *Node
}

func (t *Tree) add (value int) {
	node := newNode(value)

	if t.root == nil {
		t.root = node
		return
	}

	queue := make([]*Node,0)

	queue = append(queue, t.root)

	for len(queue) > 0 {
		subnode := queue[0]
		queue = queue[1:]

		if subnode.left == nil {
			subnode.left = node
			return
		}

		if subnode.right == nil {
			subnode.right = node
			return
		}

		queue = append(queue, subnode.left)
		queue = append(queue, subnode.right)
	}
}


// 广度遍历
func (t *Tree) travel() {

	if t.root == nil {
		return
	}

	queue := make([]*Node,0)

	queue = append(queue, t.root)

	for len(queue) > 0 {
		subnode := queue[0]
		queue = queue[1:]

		fmt.Println(subnode.value)

		if subnode.left != nil {
			queue = append(queue, subnode.left)
		}

		if subnode.right != nil {
			queue = append(queue, subnode.right)
		}


	}
}

// 深度优先遍历  先序遍历
func (t *Tree) devTravel(node *Node) {
	if node == nil {
		return
	}

	fmt.Println(node.value)
	t.devTravel(node.left)
	t.devTravel(node.right)
}


func main() {
	tree := Tree{}

	tree.add(1)
	tree.add(2)
	tree.add(3)
	tree.add(4)

	tree.travel()

	fmt.Println("*****")

	tree.devTravel(tree.root)

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值