package main
import (
"fmt"
queue "test2/Queue"
)
type Node struct {
value string
Left, Right *Node
}
var q queue.ItemQueue
//创建
func CreateNode(val string) *Node {
return &Node{value: val, Left: nil, Right: nil}
}
//设置节点的值
func (node *Node) SetValue(val string) {
node.value = val
}
//打印
func (node *Node) Print() {
fmt.Printf("%+v\n", *node)
}
//前序遍历
func (node *Node) PreOrder() {
if node == nil {
return
}
node.Print()
node.Left.PreOrder()
node.Right.PreOrder()
}
//中序遍历
func (node *Node) MidOrder() {
if node == nil {
return
}
node.Left.MidOrder()
node.Print()
node.Right.MidOrder()
}
//后序遍历
func (node *Node) PostOrder() {
if node == nil {
return
}
node.Left.PostOrder()
node.Right.PostOrder()
node.Print()
}
//广度优先遍历
func (root *Node) Bforder() {
q.Enqueue(root)
for {
item := q.Dequeue()
node, ok := item.(*Node)
if ok {
node.Print()
if node.Left != nil {
q.Enqueue(node.Left)
}
if node.Right != nil {
q.Enqueue(node.Right)
}
if q.IsEmpty() {
break
}
}
}
}
//获取高度
//取两个子节点中大的高度+1
func (node *Node) GetTreeHeight() int {
if node == nil {
return 0
}
lHight := node.Left.GetTreeHeight()
rHight := node.Right.GetTreeHeight()
if lHight >= rHight {
return lHight + 1
} else {
return rHight + 1
}
}
func main() {
root := CreateNode("A")
root.Left = CreateNode("B")
root.Right = CreateNode("C")
root.Left.Left = CreateNode("D")
root.Left.Right = CreateNode("E")
root.Right.Left = CreateNode("F")
root.Right.Right = CreateNode("G")
root.Bforder()
}
golang二叉树
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 树 在计算机科学中,树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构...
- [toc] 树 二叉树 定义 : 每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有...
- 1. 树结构示意图 补充: 兄弟节点:具有相同父节点的节点互称为兄弟节点。 树的深度:从根节点开始(其深度为0)自...