二叉樹節點的結構體定義如下:
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 如果既有右子樹,又有左...