查找非二叉树的高度

时间:2012-11-30 19:31:50

标签: c++ tree

我在网站上进行练习,在练习中我们必须通过实现一个函数来找到非二叉树的高度。我在下面有一个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 个答案:

答案 0 :(得分:0)

循环中的逻辑是完全错误的。出于某种原因,你正在寻找成对的连续孩子。相反,你应该一次看一个孩子,并选择一个具有最大身高的孩子。

答案 1 :(得分:0)

此行有错误;试着自己发现它:

if(k>maxi)k=maxi;

此外,尽管您的整体方法应该有效,但它执行的工作量超过了必要的工作量,因为大多数子树的高度几乎都会被计算两次。您可能希望重写代码以仅计算每个高度一次(提示:不要直接比较两个高度;而是将前一个子树的高度存储在变量中,并仅将一个子树的高度与变量进行比较)。

答案 2 :(得分: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]));

中的当前节点

答案 3 :(得分:0)

接下来在源代码顶部放置以下行;试着找出它们的用途并相应地修改你的代码

#include <algorithm>
using namespace std;
相关问题