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

2021-08-14 07:31:07 字數 1279 閱讀 8524

如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,

我們姑且定義"距離"為兩節點之間邊的個數。

寫乙個程式,

求一棵二叉樹中相距最遠的兩個節點之間的距離。

思路:距離最長可以認為是某棵子樹的左子樹最深加上右子樹最深,

每一層遞迴都是當前節點處理兩個子節點,每層返回當前子樹的最大深度和左右子樹深度和的最大值,

其中返回當前子樹的最大深度是用來計算上一層左右子樹深度和的最大值,因為深度最深,所以和一定是左右

子樹深度和的最大值。看不懂文字直接看**哈。樹是排序二叉樹,可以直接忽略建樹的**。

#pragma warning(disable:4996)

#include #include #include #include using namespace std;

#define n 1005

struct node

;struct treenode

;treenode* root;

void insert(treenode* treenode,int data)

else insert(treenode->right, data);

} if(treenode->data > data)

else insert(treenode->left, data); }}

node solve(treenode* treenode)

int depth = 0;

if (treenode->left != nullptr) depth++;

if (treenode->right != nullptr) depth++;

node left = solve(treenode->left);

node right = solve(treenode->right);

left.b = max(left.b, right.b);

left.b = max(left.b, left.a + right.a + depth);

if (depth)

left.a = max(left.a, right.a) + 1;

else

left.a = max(left.a, right.a);

return left;

}int main()

else insert(root, data);

} node ans = solve(root);

printf("%d\n", ans.b);

}

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

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