2012-11-30 129 views
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。但這不起作用。我怎樣才能實現這個功能?

回答

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]));

0

你的循環內部的邏輯是完全錯誤的。出於某種原因,你正在尋找一對連續的孩子。相反,你應該一次看一個孩子,並選擇一個身高最高的孩子。

+0

我看到但是,如何不停止功能,並尋找其他節點? – user1559792

+0

對於每個孩子,你都會得到他們的身高,同時保持目前爲止所見的最大高度。 – NPE

0

這條線存在錯誤;嘗試自己發現它:

if(k>maxi)k=maxi; 

此外,雖然您的總體方法應該可行,但超出必要進行更多的工作,因爲大多數子樹差不多高度的高度計算得到兩次。您可能需要重寫代碼以計算每個高度一次(提示:不要直接比較兩個高度;而應將前一個子樹的高度存儲在變量中,並僅將一個子樹的高度與變量進行比較)。

0

接下來將以下幾行放在您的源代碼上面;試圖找出他們是什麼,並相應地修復您的代碼

#include <algorithm> 
using namespace std;