《編程之美: 求二叉樹中節點的最大距離》的另一個解法

來源:互聯網
上載者:User

昨天花了一個晚上為《編程之美》,在豆瓣寫了一篇書評《遲來的書評和感想──給喜愛編程的朋友》。書評就不轉載到這裡了,取而代之,在這裡介紹書裡其中一條問題的另一個解法。這個解法比較簡短易讀及降低了空間複雜度,或者可以說覺得比較「美」吧。

問題定義

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

書上的解法

書中對這個問題的分析是很清楚的,我嘗試用自己的方式簡短覆述。

計算一個二叉樹的最大距離有兩個情況:

  • 情況A: 路徑經過左子樹的最深節點,通過根節點,再到右子樹的最深節點。
  • 情況B: 路徑不穿過根節點,而是左子樹或右子樹的最大距離路徑,取其大者。

只需要計算這兩個情況的路徑距離,並取其大者,就是該二叉樹的最大距離。

我也想不到更好的分析方法。

但接著,原文的實現就不如上面的清楚 (源碼可從這裡下載):

?
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 //
資料結構定義
struct NODE{    NODE*
pLeft;       
//
左子樹
    NODE*
pRight;      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.