二叉树相关知识及其相关操作c++实现

很显然,二叉树就是二叉树,不明白的可以百度,百度一下,包教包会

二叉树可以使用顺序结构存储,但是一般只用于完全二叉树,因为容易造成对存储空间的浪费

二叉链表:

typedef struct BiTNode
{
    TElemType data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

二叉树的遍历:

前序遍历:规则是先前序遍历左子树,再前序遍历右子树,那么上图的遍历顺序就是:FCADBEHGM

中序遍历:从根结点开始(但并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,再中序遍历根结点的右子树。 上图的遍历顺序是:ACBDFHEMG

后序遍历:先访问左右子树,最后访问根结点,遍历顺序是:ABDCHMGEF

层序遍历:一层一层来呗

/* 二叉树前序遍历递归算法*/
void PreOrderTraverse( BiTree T)
{
    if(T == NULL)
        return;
    std::cout << T->data << " "; //显示结点的数据域,也可以替换为其他任何操作
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->rchild);
}

/*中序遍历*/
void InOrderTraverse(BiTree T)
{
    if(T == NULL)
        return;
    InOrderTraverse(T->lchild);
    std::cout << T->data << " ";
    InOrderTraverse(T->rchild);
}

/*后序*/
void PostOrderTraverse(BiTree T)
{
    if(T == NULL)
        return;
    PostOrderTraverse(T->lchild);
    PostOrderTraverse(T->rchild);
    std::cout << T->data << " ";
}

根据二叉树遍历的方式可以得到的关于二叉树遍历的性质(为啥可以自己研究研究):

1.已知前序和中序,可以唯一确定一颗二叉树

2.已知后序和中序,可以唯一确定一颗二叉树

二叉树的建立:

/*按照前序输入,AB#D##C,#是扩展的空符号*/
void CreateBiTree(BiTree *T)
{
    TElemType ch;
    std::cin >> ch;
    if(ch == '#')
        *T = NULL;
    else
    {
        *T = new BiTNode;
        *T->data = ch;
        CreateBiTree(t->lchild);
        CreateBiTree(t->rchild);
    }
}

线索二叉树:

我们可以发现我们对于指针域利用不是很充分,会有空指针域的存在。

线索二叉树就是有前驱后继指针。

树、森林与二叉树的转换:

赫夫曼树及其应用:

带权路径长度最小的二叉树称做赫夫曼树

猜你喜欢

转载自blog.csdn.net/qq_23905237/article/details/88024203
今日推荐