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

2021-06-28 04:02:02 字數 969 閱讀 3658

《程式設計之美》第3.8節:求二叉樹中的最大距離

問題:如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們定義距離為兩個節點之間的邊數,求一棵二叉樹中縣局最遠的兩個節點之間的距離。

解法:樹的後序遍歷,然後再每個節點中維護兩個變數nmaxleft,nmaxright儲存當前節點為根節點的子樹中的最遠距離,不斷更新maxlength,直到根節點。

**:#includeusing namespace std;

struct node

};void findmaxlength(node *root,int &maxlength)

if(root->right==nullptr)

root->nmaxright=0;

else

if(maxlengthnmaxleft+root->nmaxright)

maxlength=root->nmaxleft+root->nmaxright;

}int main()

{ node *root=new node('a');

root->left=new node('b');

root->left->left=new node('c');

root->left->right=new node('d');

root->left->left->left=new node('e');

root->left->right->left=new node('j');

root->right=new node('f');

/* root->right->left=new node('g');

root->right->right=new node('h');

root->right->left->right=new node('i');*/

int result=0;

findmaxlength(root,result);

cout<

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

遞迴求解,最大距離總是在一下兩種情況產生 情況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...