題目:
寫乙個程式,求一棵二叉樹中相距最遠的兩個節點之間的距離。如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,
我們姑且定義"距離
"為兩節點之間邊的個數。
分析:把最深的左子樹距離加上最深的右子樹距離就是二叉樹中兩個節點的最大距離。
解一: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...