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

2021-05-28 16:41:41 字數 1213 閱讀 7979

二叉樹節點的結構體定義如下:

struct btreenode

;使用遞迴的方式,遍歷二叉樹,然後從葉子節點開始修改結構體中的 maxleft 和 maxright 變數,直至回溯到根節點。

詳細的**如下:

#include using namespace std;

// 將節點儲存的資料型別設為整型

typedef int elemtype;

struct btreenode

;// 往二叉樹中插入節點,該方法實際上最後生成的是二叉查詢樹

void insertbtree(btreenode **root, elemtype elem)

btreenode *node = *root;

while (node != null)

else

} else

else

} }}

// 宣告兩個全域性變數

btreenode *parent = null; // 儲存相距最遠的兩個節點的最近公共父節點

int longestdistance = 0; // 儲存最遠的距離值

// 獲得樹中最長距離的兩個節點

void getlongestdistance(btreenode *root)

// 左子樹為空的情況,則左子樹最大距離為0

if (root->left == null)

else

// 右子樹為空的情況,則右子樹最大距離為0

if (root->right == null)

else

// 必須遞迴遍歷完左右子樹後才能執行下面的判斷

if (root->left != null)

else

}if (root->right != null)

else

}if (longestdistance < root->maxleft + root->maxright) }

void main()

; for (int i=0; ileft;

while (temp != null)

else

}// 再找右節點

temp = parent->right;

while (temp != null)

else}}

測試使用的二叉樹如下:

程式的執行結果如下:

演算法 求二叉樹中兩個節點的最大距離

如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,定義 距離 為這條路徑上所有節點的value和。寫乙個程式求一棵二叉樹中最大的路徑距離。對於這個圖,最大的路徑是從5 3 7,距離為15的路徑。採用後序遍歷,對於每乙個節點儲存經過當前節點的單邊路徑的最大距離,定義為single max,為...

二叉樹兩個節點之間的最大距離

二叉樹兩個節點之間的最大距離,以根節點分析,最大距離可能有3種情況 左左 右右 左右 左左相當於求左子樹上的遞迴子問題,右右相當於求右子樹的遞迴子問題。左右是需要我們處理的問題。我們使用record陣列來記錄左邊的最大值和右邊的最大值。includeusing namespace std struc...

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

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