二叉树的定义
Posted 勇士后卫头盔哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的定义相关的知识,希望对你有一定的参考价值。
前言
定义:
二叉树是由n(n>=0)个结点组成的有限集合,该集合或者为空,或者是由一个根结点加上两颗分别称为左子树和右子树的,互不相交的二叉树组成
在此之前我们已经实现过了通用树结构,通用树结构中的每个结点都可以有任意多的孩子,都可能具有无线形态,所以很复杂,我们可以简化结点中孩子的数量,之前实现的通用树结构是用双亲孩子表示法来实现的,如下图所示,每个结点都有一个指向双亲的指针,每个结点都有若干个指向其孩子的指针
除此之外还有一种树结构模型叫孩子兄弟表示法,如下图所示,每个结点都有一个指向其第一个孩子的指针,每个结点都有一个指向其第一个右兄弟的指针,可以看出孩子兄弟表示法能够表示任意的树形结构,每个结点包含一个数据成员和两个指针成员,孩子结点指针和兄弟结点指针构成了"树杈",就是所谓的二叉树,孩子兄弟表示法能够将通用树转化为二叉树
二叉树还有满二叉树和完全二叉树之分,定义如下
满二叉树
如果二叉树中所有分支结点的度数都为2,且叶子结点都在同一层次上,则称这类二叉树为满二叉树
完全二叉树
如果一颗具有n个结点的高度为K的二叉树,它的每一个结点都与高度为k的满二叉树中编号为1-n的结点一一对应,则称为这棵二叉树为完全二叉树(从上到下从左到右)
二叉树的深层特性
1
在二叉树的第i层最多有2的i-1次方个结点
2
在二叉树的第i层最多有2的i次方个结点-1个结点
3
对于任何一颗二叉树,如果其叶节点有n0个,度为2的非叶节点有n2个,则有n0=n2+1
4
5
二叉树的存储设计
设计要点
BTree为二叉树结构,每个结点最多只有两个后继结点
BTreeNode只包含4个固定的公有成员(一个数据成员,两个指向后继结点的指针成员,一个指向父节点的指针成员便于遍历)
实现树结构的所有操作(增,删,查等)
BTree.h
namespace CGSLib
template <typename T>
class BTree : public Tree<T>
bool insert(TreeNode<T>* node)
bool insert(const T& e,TreeNode<T>* parent)
SharedPointer< Tree<T> > remove(const T& value)
SharedPointer< Tree<T> > remove(TreeNode<T>* node)
TreeNode<T>* find(const T& value)const
TreeNode<T>* find(TreeNode<T>* node)const
TreeNode<T>* root()const
int degree()const
int count()const
int height()const
void clear()
;
BTreeNode.h
namespace CGSLib
template <typename T>
class BTreeNode : public TreeNode<T>
public:
BTreeNode<T> *r_pointer;
BTreeNode<T> *l_pointer;
BTreeNode()
r_pointer = NULL;
l_pointer = NULL;
static BTreeNode<T>* NewNode()
BTreeNode<T>* ret = new BTreeNode<T>();
if(ret != NULL)
ret->m_flag = true;
return ret;
;
以上是关于二叉树的定义的主要内容,如果未能解决你的问题,请参考以下文章