我在网站上进行练习,在练习中我们必须通过实现一个函数来找到非二叉树的高度。我在下面有一个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。但这不起作用。我该如何实现这个功能?
答案 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;