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