0

私はウェブサイトで演習を行っていましたが、演習では、関数を実装して非二分木の高さを見つける必要があります。以下に TreeNode クラスがあります。

class TreeNode
{
public:
TreeNode();
TreeNode(string data);
void addChild(TreeNode* child);
vector<TreeNode*>& getChildren();
void setData(string data);
string getData();
void visit();
};

私はこのhttp://codepad.org/BiXkbABfを実装しています。しかし、これはうまくいきません。この機能を実装するにはどうすればよいですか?

4

4 に答える 4

0

この行にはエラーがあります。自分で見つけてみてください:

if(k>maxi)k=maxi;

さらに、全体的なアプローチは機能するはずですが、ほとんどのサブツリーの高さとほぼ同じ高さが 2 回計算されるため、必要以上の作業が実行されます。各高さを 1 回だけ計算するようにコードを書き直すこともできます (ヒント: 2 つの高さを直接比較しないでください。代わりに、前のサブツリーの高さを変数に格納し、1 つのサブツリーの高さだけを変数と比較してください)。

于 2012-11-30T19:35:50.633 に答える
0

次に、ソース コードの上に次の行を配置します。それらが何のためにあるのかを理解し、それに応じてコードを修正してください

#include <algorithm>
using namespace std;
于 2012-11-30T20:00:37.720 に答える
0

ループ内のロジックは完全に間違っています。何らかの理由で、連続する子のペアを見ています。代わりに、一度に 1 人の子を見て、最大の高さを持つ子を選択する必要があります。

于 2012-11-30T19:35:01.680 に答える
0
int hight(TreeNode* node) {
    vector<TreeNode*>& children = node.getChildren();
    unsigned int h = 0;
    for(int i = 0; i < children.size(); i++) {
        h = std::max(h, hight(children[i]));
    }
    return h + 1;
}

return 1 + maxi; はエラーです。あなたはすでに現在のノードを説明していますk = 1 + max(height((tree->getChildren)()[i]),height((tree->getChildren)()[i+1]));

于 2012-11-30T19:45:35.123 に答える