バイナリツリーの幅

説明】【課題
バイナリツリーアルゴリズムの幅(ノード、その層の数が最も多いノード数)の貯蔵、調製用バイナリーリスト構造に関する。

[入力]の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();

}

次の白不適切な場所がある場合は、私を修正してください

公開された15元の記事 ウォンの賞賛5 ビュー551

おすすめ

転載: blog.csdn.net/weixin_44034024/article/details/104895485