美文网首页
数据结构(C++实现)--二叉树

数据结构(C++实现)--二叉树

作者: ustclcl | 来源:发表于2018-11-14 22:58 被阅读0次

二叉树

二叉树是每个父节点最多只有两个子节点


binarytree

如图,是表达式的二叉树的表示。
引申出:

  • 满二叉树,每个父节点都有两个子节点
  • 完全二叉树,只缺少最后n个节点。从上到下,从左至右编号,那么每个父节点k,若有左子节点,则编号为2k,若有右子节点,则编号为2k+1


    CompleteBinaryTree

二叉树的表示可以用数组或者链表,使用数组时,可以用空位表示不存在的子节点,但极端情况下可能会浪费空间。比如一种右斜二叉树


rightskewedBinaryTree

使用链表表示则更符合我们的一般认知。每个节点有左子节点LeftChild,右子节点RightChild和数据域Data。
节点的类如下

template <typename T>
class BinaryTreeNode
{
    friend void Visit(BinaryTreeNode<T>*);
    friend void InOrder(BinaryTreeNode<T>*);
    friend void PreOrder(BinaryTreeNode<T>*);
    friend void PostOrder(BinaryTreeNode<T>*);
    friend void LevelOrder(BinaryTreeNode<T>*);
    friend void main(void);
public:
    BinaryTreeNode()(LeftChild = RightChild = 0;)
    BinaryTreeNode(const T& e)
    {
        data = e;
        LeftChild = RightChild = 0;
    }
    BinaryTreeNode(const T& e, BinaryTreeNode* l, BinaryTreeNode* r)
    {
        data = e;
        LeftChild = l;
        RightChild = r;
    }
private:
    T data;
    BinaryTreeNode<T>* LeftChild;
    BinaryTreeNode<T>* RightChild;
};

私有成员有data和左右节点。同时构造函数有三种形式:

  • 无参数时,将左右子节点指针置零
  • 有一个data参数,初始化data,将左右子节点指针置零
  • 有三个参数,则将三个成员全部初始化

使用一个节点来保存二叉树的根。通常我们不需要父节点指针。

二叉树的常用操作

二叉树的常用操作有:

  • 确定其高度
  • 确定其数目
  • 复制
  • 打印

以上操作均需要二叉树的遍历

  • 前序遍历
template <typename T>
void PreOrder(BinaryTreeNode<T> * t)
{
    if(t)
    {
        Visit(t);
        PreOrder(t->LeftChild);
        PreOrder(t->RightChild);
    }
}
  • 中序遍历
void InOrder(BinaryTreeNode<T> * t)
{
    if(t)
    {

        InOrder(t->LeftChild);
        Visit(t);
        InOrder(t->RightChild);
    }
}
template <typename T>
  • 后序遍历
void PostOrder(BinaryTreeNode<T> * t)
{
    if(t)
    {

        PostOrder(t->LeftChild);
        PostOrder(t->RightChild);
        Visit(t);
    }
}
template <typename T>
  • 逐层遍历
    (待补充)

  • 最大(小)树
    每个节点的值都大(小)于其子节点值的树
  • 最大(小)堆
    最大(小)完全二叉树

相关文章

  • php实现二叉树

    二叉树是数据结构中不可忽略的部分,但是相关的书籍上很少有用php来实现二叉树的,下面是我用php参考C++实现二叉...

  • 算法之二叉树

    二叉树之C++实现 创建二叉树 复制二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍...

  • c++ 实现队列

    相关资料: 用C++实现一个队列 数据结构代码实现之队列的链表实现(C/C++)

  • 关于函数递归和迭代的转化, 及尾递归相关知识的接触和思考

    javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作 js 二叉树 【数据结构与算法】深入浅出递...

  • Hash 表实现

    Hash 表、二叉树、链表是最常见的数据结构。 本文中用C++来实现一个简单的哈希表,帮助理解哈希表是怎样运作的。...

  • 数据结构之二叉树

    数据结构之二叉树 递归构造二叉树 二叉树节点: 递归构造: 图示: 递归遍历 递归实现先序遍历 图示: 递归实现中...

  • 二叉树的创建和遍历

    二叉树的创建和遍历 如图所示的二叉树,我们用C++来实现其创建和...

  • 二叉树操作的C++实现

    这几天做数据结构的作业,苦于C++没有现成的二叉树的类,书本上的实现方法是c语言的,而且一点都不好看,太郁闷了。 ...

  • OC对象

    OC的本质 oc代码,底层是由c/c++实现 Objective-C的面向对象都是基于C\C++的数据结构实现的 ...

  • 二叉树的实现

    数据结构和算法的重要性毋庸置疑,本文将采用Java语言,来实现基本的二叉树。 实现二叉树对于二叉树本身的理解和递归...

网友评论

      本文标题:数据结构(C++实现)--二叉树

      本文链接:https://www.haomeiwen.com/subject/igrsfqtx.html