面試100題 11 求二叉樹中節點的最大距離

2021-06-21 15:41:39 字數 1855 閱讀 5561

題目:

寫乙個程式,求一棵二叉樹中相距最遠的兩個節點之間的距離。如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,

我們姑且定義"距離

"為兩節點之間邊的個數。

分析:把最深的左子樹距離加上最深的右子樹距離就是二叉樹中兩個節點的最大距離。

解一:getmaxpathfrombst

/*title:    11.求二叉樹中節點的最大距離: 解一

author:     gocode

date:       2012-10-15*/

#include 

#include 

using

namespace

std;  

// 二叉樹結點

typedef

struct

tagbstnode  

} s_bstnode;  

// 刪除結點清除記憶體

void

deleteallnode(s_bstnode* proot)  

// 建立二叉樹

void

addbstreenode(s_bstnode* &proot, 

intnvalue)  

if(proot->nvalue > nvalue)  

else

if( proot->nvalue < nvalue)  

}  // 取得最大深度

intgetmaxdepth(

const

s_bstnode* proot)  

// 取得最大距離=左最大深度+右最大深度

intgetmaxdistance(

const

s_bstnode* proot)  

intmain()    

解二:getmaxpathfrombst2

/*title:    11.求二叉樹中節點的最大距離: 解二

author:     gocode

date:       2012-10-15*/

#include 

#include 

#include

using

namespace

std;  

// 資料結構定義

typedef

struct

node  

} s_bstnode;  

void

addbstreenode(s_bstnode* &proot, 

intnvalue)  

if(proot->nvalue > nvalue)  

addbstreenode(proot->psleft, nvalue);  

else

if( proot->nvalue < nvalue)  

addbstreenode(proot->psright, nvalue);  

}  void

deleteallnode(s_bstnode* proot)  

intg_nmaxlen = 0;  

// 尋找樹中最長的兩段距離

void

findmaxlen(node* proot)  

// 計算右子樹最長節點距離

if(proot->psright != null)  

// 更新最長距離

if((proot->nmaxleft + proot->nmaxright) > g_nmaxlen)  

g_nmaxlen = proot->nmaxleft + proot->nmaxright;  

}  int

_tmain(

intargc, _tchar* argv)  

微軟100題(11) 二叉樹中節點的最大距離

題目 求二叉樹中節點的最大距離.如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義 距離 為兩節點之間邊的個數。寫乙個程式,求一棵二叉樹中相距最遠的兩個節點之間的距離 我覺得相隔最遠的 應該是左子樹最深的 和 右子樹最深的結點之間 所以轉變為求左子樹深度 和 右子樹深度 最長距...

微軟100題 求二叉樹中節點的最大距離

如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義 距離 為兩節點之間邊的個數。寫乙個程式,求一棵二叉樹中相距最遠的兩個節點之間的距離。package test public class nodepackage test public class resultpackage t...

11 求二叉樹中節點的最大距離

如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義 距離 為兩節點之間邊的個數。寫乙個程式,求一棵二叉樹中相距最遠的兩個節點之間的距離。這裡可以求節點的左右子樹的高度,然後可以得到一該幾點為根的最長路徑。遍歷書的每乙個節點,並在遍歷過程中用n記錄最大值!include usin...