二叉树理解

一、二叉树简介

1、二叉树简介二叉树是由n(n>=0)个结点组成的有序集合,集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。

二叉树的五种形态:

数据结构(十四)——二叉树

 

2、二叉树的存储结构模型

树的另一种表示法:孩子兄弟表示法

A、每个结点都有一个指向其第一个孩子的指针

B、每个结点都有一个指向其第一个右兄弟的指针

数据结构(十四)——二叉树

孩子兄弟表示法的特性:

A、能够表示任意的树形结构

B、每个结点包含一个数据成员和两个指针成员

C、孩子结点指针和兄弟结点指针构成树杈

 

3、满二叉树

如果二叉树中所有分支结点的度数都为2,并且叶子结点都在统一层次上,则二叉树为满二叉树。

数据结构(十四)——二叉树

 

4、完全二叉树

如果一棵具有n个结点的高度为k的二叉树,树的每个结点都与高度为k的满二叉树中编号为1——n的结点一一对应,则二叉树为完全二叉树。

完全二叉树的特性:

A、同样结点数的二叉树,完全二叉树的高度最小

B、完全二叉树的叶子结点仅出现在最下边两层,并且最底层的叶子结点一定出现在左边,倒数第二层的叶子结点一定出现在右边。

C、完全二叉树中度为1的结点只有左孩子。

数据结构(十四)——二叉树

 

5、二叉树的特性

A、在二叉树的第i层上最多有2^(i-1)个结点(i>=1)。

B、高度为k的二叉树,最多有2^k-1个结点(k>=0)。

C、对任何一棵二叉树,如果其叶结点有n个,度为2的非叶子结点有m个,则

n = m + 1。

D、具有n个结点的完全二叉树的高度为logn + 1

E、对于有n个结点的完全二叉树,按层次对结点进行编号(从上到下,从左到右),对于任意编号为i的结点:

数据结构(十四)——二叉树

 

二、二叉树的操作

1、二叉树的存储结构实现

数据结构(十四)——二叉树

二叉树结点包含四个固定的成员:结点的数据域、指向父结点的指针域、指向左子结点的指针域、指向右子结点的指针域。结点的数据域、指向父结点的指针域从TreeNode模板类继承而来。

二叉树结点的实现:

 

template <typename T>

1

class BTreeNode:public TreeNode

{

public:

BTreeNode* m_left;//左子结点

BTreeNode* m_right;//右子结点

BTreeNode()

{

m_left = NULL;

m_right = NULL;

}

 

//工厂方法,创建堆空间的结点

static BTreeNode<T>* NewNode()

{

  BTreeNode<T>* ret = new BTreeNode<T>();

  if(ret != NULL)

  {

      //堆空间的结点标识为true

      ret->m_flag = true;

  }

  return ret;

};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大恐龙的小弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值