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)自...