2012-05-04 229 views
0

所以我想添加一個findHeight方法給我的教授Binary Tree Class,而且我有點麻煩。二叉樹findHeight

BTNode<T> findParent(BTNode<T> Root, BTNode<T> child) 
    { 
    if(!root) 
    { 
     return Null; 
    } 

    if(Root.left* == child || Root.right* == child) 
    { 
     return Root; 
    } 
    else 
    { 
     //recursively checks left tree to see if child node is pointed to 
     findParent(Root.left, child); 

     //recursively checks right tree to see if child node is pointed to 
     findParent(Root.right, child); 
    } 

    int findHeight(BTNode<T> thisNode) 
    { 
     if (Count.findParent(.root, thisNode) == null)  
     { 
      return 0; 
     } 

     return findHeight(thisNode.findParent) + 1; 
    } 

我的問題是,在findHeight方法,它調用findParent()方法,我不得不引用參數thisNode來自二進制樹的根,因爲這僅僅是部分上課,我不知道我應該如何引用根。 BT(二叉樹)類有一個函數返回樹的根,但由於我沒有二進制樹來引用,我不知道該怎麼做。請幫忙!!!

回答

1

通常,findHeight函數不會「擔心」找到樹的根 - 它只是在它傳遞的任何節點下找到樹的高度。它通常看起來像這樣:

int findHeight(BTNode <T> *thiNode) { 
    if (thisNode == NULL) 
     return 0; 
    int left_height = findHeight(thisNode->left); 
    int right_height = findHeight(thisNode->right); 
    return 1 + max(left_height, right_height); 
} 

然後由用戶傳遞他們想要的高度樹的根。

+0

這很有道理。對此的一個後續問題,我將如何去尋找樹中每片樹葉的平均高度?如果我剛剛遍歷樹並找到每個節點的高度,它就會按照我做它的方式工作(這當然不是最聰明的方式)。也許我讀錯了,但是你的函數似乎只有在你把根插入並找到整棵樹的高度,而不是找到單個節點的高度時才起作用。 – user1375501

+0

@ user1375501:至少乍一看,似乎發現樹的平均高度主要涉及將兩個子樹的平均高度加1,不是嗎? –

+0

是的,它的確如此。感謝所有的幫助:) – user1375501