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

2021-09-08 13:56:49 字數 1080 閱讀 1428

程式設計之美中的一道題

程式設計之美中採用的解法是一種侵入式的

解法例如以下

struct node; 

int nmaxlen = 0;

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

void findmaxlen(node* proot)

// 假設左子樹為空,那麼該節點的左邊最長距離為0

if(proot -> pleft == null)

// 假設右子樹為空,那麼該節點的右邊最長距離為0

if(proot -> pright == null)

// 假設左子樹不為空,遞迴尋找左子樹最長距離

if(proot -> pleft != null)

// 假設右子樹不為空。遞迴尋找右子樹最長距離

if(proot -> pright != null)

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

if(proot -> pleft != null)

else

proot -> nmaxleft = ntempmax + 1;

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

if(proot -> pright != null)

else

proot -> nmaxright = ntempmax + 1;

}// 更新最長距離

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

}

我在解決問題時。想到的還有乙個演算法,推斷一棵樹是否是平衡二叉樹,以下是我的解決方法,使用的php語言

public function getmaxdistance($node,&$max)

$left = $this->getmaxdistance($node->lchild,$max);

$right = $this->getmaxdistance($node->rchild,$max);

if($max < ($left+$right))

return 1+($left>$right?

$left:$right); }

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

遞迴求解,最大距離總是在一下兩種情況產生 情況1 最大路徑經過root 這個例子中,最長路徑經過root,其距離等於左子樹的高度 1 右子樹的高度 1 在這種情況下 如果只有左子樹,右子樹為空 最大距離 左子樹的高度 1 如果只有右子樹,左子樹為空 最大距離 右子樹的高度 1 如果既有右子樹,又有左...

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

2010 10 26 16 03 37 分類 資料結構與演算法 標籤 proot 節點pleft pright nmaxleft 字型大小 大中小訂閱 如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義 距離 為兩個節點之間邊的個數。寫乙個程式求一顆二叉樹中相距最遠的兩個節點之...

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

如果我們把二叉樹看成乙個圖,父子之間的連線看成,姑且定義 距離 為兩個之間邊的個數。求一顆二叉樹中相距最遠兩個點之間的距離。struct node bittree int nmaxlen 0 void findmaxlen node proot if proot pleft null if proo...