1. 首页 > 综合百科

二叉树图示 二叉树详解

大家好,我是城乡经济网的萧声来回答以上问题。很多人还不知道二叉树图和详细解释。现在让我们来看看!

树是一种数据结构,由n (n >)组成;=1)有限个节点形成一个具有层次关系的集合。二叉树是一种每个节点最多有两个子树的树结构。二叉树是最简单的树结构,树结构是有层次的,对应的是一个线性结构。

二叉树分类:

在二叉树中,只有最下面两层的节点的度可以小于2,最底层的叶节点集中在左边的几个位置。这样的二叉树叫做完全二叉树。

高度为h,由2h-1个节点组成的二叉树称为全二叉树。

二叉树的性质

属性1:二叉树的I层上的最大节点数为2i-1(I >;=1)

性质2:深度为k的二叉树最多有2k-1个节点(k >;=1)

性质3:包含n个节点的二叉树的高度至少是(log2n) 1。

性质4:在任一二叉树中,若终端节点数为n0,度为2的节点数为n2,则n0 = N2 ^ 1。

二叉树排序:

前序遍历

1.访问根节点

2.遍历根节点的左子树。

3.遍历根节点的右子树。

有序遍历

1.中间顺序遍历根节点的左子树。

2.访问根节点

3.中间顺序遍历根节点的右子树。

后序遍历

1.根节点的左子树的后序遍历

2.根节点右子树的后序遍历

3.访问根节点

二叉排序树也被称为二叉查找树或二叉查找树。一开始是二叉树,必须满足以下条件:

1)如果左子树不是空,则左子树上所有节点的值都小于其根节点的值;

2)如果右子树不是空,则右子树上所有节点的值都大于其根节点的值。

3)左右子树也是二叉排序树。

4)没有键值相等的节点。

实现:

在实际使用中,会根据链表、有序数组等数据结构的不同优势进行选择。

有序阵列的优势在于二分搜索法;

链表的优势在于数据项的插入和删除;

结构:

二叉树需要定义指向左右子节点的指针,以及存储的数据;

类型BinaryTree结构{

数据接口{}

Lchild *BinaryTree

Rchild *BinaryTree

}

Go示例:

//二叉树二叉树

打包算法

导入(

"反思& quot

)

//二叉树定义

类型BinaryTree结构{

数据接口{}

Lchild *BinaryTree

Rchild *BinaryTree

}

//构造方法

func NewBinaryTree(数据接口{}) *BinaryTree {

返回& ampBinaryTree{Data: data}

}

//优先遍历

func(Bt * binary tree)PreOrder()[]接口{} {

t := bt

stack := NewStack(reflect。类型(bt))

res := make([]interface{},0)

为了t!= nil ||!堆栈。Empty() {

为了t!=零{

res = append(res,t.Data)

堆栈。推(t)

t = t.Lchild

}

如果!堆栈。Empty() {

v,_ :=栈。流行()

t = v.(*BinaryTree)

t = t.Rchild

}

}

返回资源

}

//中间顺序遍历

func(Bt * binary tree)in order()[]interface { } {

t := bt

stack := NewStack(reflect。类型(bt))

res := make([]interface{},0)

为了t!= nil ||!堆栈。Empty() {

为了t!=零{

堆栈。推(t)

t = t.Lchild

}

如果!堆栈。Empty() {

v,_ :=栈。流行()

t = v.(*BinaryTree)

res = append(res,t.Data)

t = t.Rchild

}

}

返回资源

}

//后续遍历

func(Bt * binary tree)post order()[]接口{} {

t := bt

stack := NewStack(reflect。类型(bt))

s := NewStack(反射。TypeOf(true))

res := make([]interface{},0)

为了t!= nil ||!堆栈。Empty() {

为了t!=零{

堆栈。推(t)

南推(假)

t = t.Lchild

}

对于flag,_:= s . Top();!堆栈。empty()& amp;& amp旗帜。(bool);{

南流行()

v,_ :=栈。流行()

res = append(res,v.(*BinaryTree)。数据)

flag,_ = s.Top()

}

如果!堆栈。Empty() {

南流行()

南推送(真)

v,_ :=栈。顶部()

t = v.(*BinaryTree)

t = t.Rchild

}

}

返回资源

}

更多信息请关注日常编程,天天向上。

本文就在这里给你解释一下,希望能帮到你。

本文由发布,不代表多多百科立场,转载联系作者并注明出处:http://www.tatabe.com/zhonghebaike/105830.html

留言与评论(共有 0 条评论)
   
验证码:

联系我们

在线咨询:点击这里给我发消息

微信号:weixin888

工作日:9:30-18:30,节假日休息