Ancho de árbol binario

Descripción] [Problemas
a estructura de lista binario para el almacenamiento, la preparación de una anchura algoritmo de árbol binario (el número de nodos que tienen el mayor número de nodos que capa).

[Entrada] forma dos líneas, la primera línea se extiende secuencia preorder traversal de un árbol binario.
[Forma] la anchura de la salida de un árbol binario.
de entrada de muestra] [AB # D ## C ##
[salida] Muestra
2
Análisis:
1. El nodo de árbol binario
2. El nodo de entrada
3. El recorrer el árbol para encontrar la anchura máxima de
4 impresiones

nodo de árbol binario

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;

};

nodo de entrada

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;
}

Uso de la función de encontrar una anchura máxima
add desea funciones de biblioteca
C ++ colas de función usando
operaciones básicas: cabecera #include <queue>
de inserción (x) x es presionado en el extremo de la cola

pop () primer elemento (elemento superior del equipo), pop-up cola Tenga en cuenta que esta función no devuelve ningún valor

delantera () devuelve el primer elemento (elementos de la parte superior del equipo)

espalda () Devuelve el último elemento se presiona en (el elemento de la cola)

vaciar () cuando la cola está vacía, de vuelta verdad

size () devuelve la longitud de la cola de

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 función principal

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

}

Si hay un lugar inadecuado próxima blanco por favor, corríjanme

Publicado 15 artículos originales · ganado elogios 5 · Vistas 551

Supongo que te gusta

Origin blog.csdn.net/weixin_44034024/article/details/104895485
Recomendado
Clasificación