二叉樹兩個節點之間的最大距離,以根節點分析,最大距離可能有3種情況:
左左+右右+左右
左左相當於求左子樹上的遞迴子問題,右右相當於求右子樹的遞迴子問題。左右是需要我們處理的問題。我們使用record陣列來記錄左邊的最大值和右邊的最大值。
#includeusing namespace std;
struct node
}; int posorder(node* head, int* record)
int lmax = posorder(head->left, record);
int maxfromleft = record[0];
int rmax = posorder(head->right, record);
int maxfromright = record[0];
int curnodemax = maxfromleft + maxfromright + 1;
record[0] = max(maxfromleft, maxfromright) + 1;
return max(max(lmax, rmax), curnodemax);
} int maxdistance(node* head)
void main()
求二叉樹中兩個節點的最大距離
二叉樹節點的結構體定義如下 struct btreenode 使用遞迴的方式,遍歷二叉樹,然後從葉子節點開始修改結構體中的 maxleft 和 maxright 變數,直至回溯到根節點。詳細的 如下 include using namespace std 將節點儲存的資料型別設為整型 typedef...
二叉樹兩個節點間的距離
距離是指連線兩個節點需要的最小的邊的條數。1找到節點的共同祖先 2 找到節點到共同祖先的距離dist,可以想到這個距離disthelper 節點到root距離 root到共同祖先的距離 3 兩個節點間距離 節點1到共同祖先的距離dist1 節點2到共同祖先的距離dist2 節點1到root距離 ro...
演算法 求二叉樹中兩個節點的最大距離
如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,定義 距離 為這條路徑上所有節點的value和。寫乙個程式求一棵二叉樹中最大的路徑距離。對於這個圖,最大的路徑是從5 3 7,距離為15的路徑。採用後序遍歷,對於每乙個節點儲存經過當前節點的單邊路徑的最大距離,定義為single max,為...