説明】【課題
バイナリツリーアルゴリズムの幅(ノード、その層の数が最も多いノード数)の貯蔵、調製用バイナリーリスト構造に関する。
[入力]の2行を形成し、最初の行は、バイナリツリーの拡張シーケンス先行順走査です。
[フォーム]バイナリツリーの出力の幅。
サンプル入力] [AB#D ## C ##
[出力]試料
2つ
の分析:
1.バイナリツリーノード
2入力ノード
3の最大幅を見つけるためにツリーをトラバース
4枚の印刷物を
バイナリツリーノード
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;
};
入力ノード
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;
}
最大幅を見つけるために関数を使用して
追加するライブラリ関数を所望の
使用機能キューC ++
の基本的な操作を:ヘッダー#include <queue>
プッシュ(x)は、xはキューの末尾に押し込まれます
ポップ()最初の要素(チームトップの要素)、ポップアップキュー(注)この機能は、任意の値を返さないこと
フロント()は最初の要素を返す(トップチーム素子)
バックは、()の最後の要素は、(尾の要素)に押されて返します。
キューが空の場合、trueを返す)(空
サイズ()キューの長さを返します
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;
}
主な機能
int main()
{
BiTree<char>t1;
cout<<t1.Width();
}
次の白不適切な場所がある場合は、私を修正してください