0

説明 このタスクの実行方法がわかりません....しかし、ツリーを作成して値を入力したところです..誰かこのタスクを実行するのを手伝ってくれませんか...スタックもノードタイプであり、プッシュする必要がありますab+ のような演算子の値なので、a をノードとしてプッシュし、次に b をノードとしてプッシュし、+ が来るとツリーを作成し、a と b がそのリーフ ノードになります。

。コード

#include<iostream>

using namespace std;

class Node{
public:
    int data;
    Node *left;
    Node *right;
    Node()
    {
        data = 0;
        left = NULL;
        right = NULL;
    }
};

class Tree
{
    Node *root;
    void insert(int d, Node *node)
    {
        if (d < node->data)
        {
            if (node->left == NULL)
            {
                Node *leaf = new Node();
                leaf->data = d;
                node->left = leaf;
            }
            else
            {
                insert(d, node->left);
            }
        }
        else
        {
            if (node->right == NULL)
            {
                Node *leaf = new Node();
                leaf->data = d;
                node->right = leaf;
            }
            else
            {
                insert(d, node->right);
            }

        }
    }

    void inOrderDisplay(Node *subRoot)
    {

        if (subRoot != NULL)
        {
            inOrderDisplay(subRoot->left);
            cout << subRoot->data << "  ";
            inOrderDisplay(subRoot->right);
        }
    }

    void postOrderDisplay(Node *subRoot)
    {

        if (subRoot != NULL)
        {
            postOrderDisplay(subRoot->left);
            postOrderDisplay(subRoot->right);
            cout << subRoot->data << "  ";
        }
    }

    void preOrderDisplay(Node *subRoot)
    {

        if (subRoot != NULL)
        {
            cout << subRoot->data << "  ";
            preOrderDisplay(subRoot->left);
            preOrderDisplay(subRoot->right);

        }
    }

    void deleteSubtree(Node *subRoot)
    {
        if (subRoot != NULL)
        {
            deleteSubtree(subRoot->left);
            deleteSubtree(subRoot->right);
            cout << "\ndeleting: " << subRoot->data;
            delete subRoot;
            subRoot = NULL;
        }
    }

public:
    Tree()
    {
        root = NULL;
    }
    ~Tree()
    {
        deleteAll();
    }

    void insert(int d)
    {
        if (root == NULL)
        {
            Node *leaf = new Node();
            leaf->data = d;
            root = leaf;
        }
        else
        {
            insert(d, root);
        }
    }

    void inOrderDisplay()
    {
        inOrderDisplay(root);

    }

    void postOrderDisplay()
    {
        postOrderDisplay(root);

    }

    void preOrderDisplay()
    {
        preOrderDisplay(root);

    }
    void deleteAll()
    {
        deleteSubtree(root);
    }

};

.メインクラス:

#include<iostream>
#include"task1.h"
using namespace std;

void main()
{
    Tree tree;

    tree.insert(10);
    tree.insert(6);
    tree.insert(14);
    tree.insert(5);
    tree.insert(8);
    tree.insert(11);
    tree.insert(18);
    cout << endl;
    system("pause");
    //tree.deleteAll();
}
4

1 に答える 1

1

ここにあるコードに基づいて、機能のみがあり、void insert(int d, Node *node)機能はありませんvoid insert(operator o, Node *node)

これは、ここで重要な点を見逃していることを示していると思います。ツリー内のすべてのノードは、(あなたが行ったように) 整数または operatorのいずれかになります。どちらの場合も、文字列と呼びます。葉ではないすべてのノードは演算子でなければならず、すべての葉は整数 (またはこの場合は演算子/整数を表す文字列) でなければなりません。

次に、入力を繰り返すと、最初の 3 つの項目は次のようになります。

    +
   / \
  a   b

次のステップは、より多くのサブツリーを構築し (入力の定義がわからない場合)、それらをスタックに保持してから、ツリーの内部ノードをさらに構築することです。

したがって、上に示したツリーがTree(+)(使いやすさのために) 呼び出され、最初のスタックが だった[a,b,+,c,d,e,*,*]場合、1 回の反復の後、[Tree(+),c,d,e,*,*]そこから続行します。

于 2015-06-22T06:02:01.660 に答える