largeur d'arbre binaire

Description] [Problèmes
à la structure de liste binaire pour le stockage, la préparation d'une largeur d'algorithme d'arbre binaire (le nombre de noeuds ayant le plus grand nombre de noeuds que la couche).

[Input] forment deux lignes, la première ligne est étendu séquence précommande traversée d'un arbre binaire.
[Formule] , la largeur de la sortie d'un arbre binaire.
entrée d' échantillon] [AB # D ## C ##
[sortie] Exemple
2
Analyse:
1. Le noeud de l' arbre binaire
2. Le noeud d'entrée
3. La traversée de l'arbre pour trouver la largeur maximale de
4 impressions

noeud arbre binaire

template <typename DataType>
struct BiNode
{
    DataType data;
    BiNode<DataType>*lchild,*rchild;
};
template<typename DataType>
class BiTree
{
public:
    BiTree()
    {
        root=Create();
    }
    int Width();//不用递归调用的函数 不用再在private里写一个同名函数了
private:
    BiNode<DataType>*Create();
    BiNode<DataType>*root;

};

noeud d'entrée

BiNode<DataType>*BiTree<DataType>::Create()
{
    BiNode<DataType>*bt;
    char ch;
    cin>>ch;
    if(ch=='#')
        bt=NULL;
    else
    {
        bt=new BiNode<DataType>;
        bt->data=ch;
        bt->lchild=Create();
        bt->rchild=Create();
    }
    return bt;
}

Utilisation de la fonction de trouver une largeur maximale
fonctions de bibliothèque add désiré
c ++ files d' attente de fonction en utilisant les
opérations de base: en- tête #include <queue>
poussoir (x) x est pressé dans l'extrémité de la file d' attente

premier élément pop () (équipe élément en haut), la file d'attente pop-up Notez que cette fonction ne renvoie aucune valeur

avant () renvoie le premier élément (top éléments d'équipe)

arrière () retourne le dernier élément est enfoncé dans (l'élément de queue)

vider () lorsque la file d'attente est vide, retourner true

size () retourne la longueur de la file d'attente

int BiTree<DataType>::Width()
{
    queue<BiNode<DataType>*>Q;//申请一个队列 队列的类型为结点类型的 :<BiNode<DataType>*>
    int w;
    if(root==NULL)//树为空 宽度为零
        return 0;
    else
    {
        Q.push(root);//根节点入队
        w=1;
        int maxw;//设一个整形变量 存最大值
        maxw=w;
        while(!Q.empty())//判断队列是否为空 空了代表遍历完成
        {
            for(int i=0;i<w;i++)//该结点出队 它的子结点入队
            {
                if(Q.front()->lchild!=NULL)
                Q.push(Q.front()->lchild);
                if(Q.front()->rchild!=NULL)
                Q.push(Q.front()->rchild);
                Q.pop();//该结点出队

            }
            w=Q.size();
            if(maxw<w)//保证每次 maxw都会是最大的
                maxw=w;
        }
        return maxw;
    }

La fonction principale

int main()
{
    BiTree<char>t1;
    cout<<t1.Width();

}

S'il y a un endroit suivant inapproprié blanc s'il vous plaît me corriger

Publié 15 articles originaux · louange gagné 5 · Vues 551

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44034024/article/details/104895485
conseillé
Classement