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

2021-06-16 18:09:52 字數 1097 閱讀 9770

如果我們把二叉樹看成乙個圖,

父子節點之間的連線看成是雙向的,

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

寫乙個程式,

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

解題思路:這是一道經典的樹形dp的問題,兩次遍歷整棵樹,一次從葉子到樹根,求得以該點為根的樹中節點到該點的最遠距離,第二次從根到葉子進行遍歷,因為每乙個點到其它點的最遠距離不一定在以該點為根的樹中,可能在父節點的其它分支中,因此可以更新父節點到當前點的最遠距離,然後比較每條分支的最遠距離即可求得當前點的最遠距離,這樣便可以求出最後結果

#include #include using namespace std;

#define maxn 0x3ffffff

int max1;

struct node

;int max(int a,int b)

void newset(node *&s,int n) //建立二叉樹

else if(s->numright,n);

} else if(s->num>n) }

void dfs1(node *&s) //進行第一次深搜,求得以該點為根的樹中節點到該點的最遠距離

}if(s->right!=null)

}if(s->left!=null)

if(s->right!=null) }

void dfs2(node *&s) //第二次深搜

}void find(node *&s)

}int main()

{ max1=-maxn;

node *root=null;

newset(root,10);

newset(root,6);

newset(root,14);

newset(root,4);

newset(root,8);

newset(root,12);

newset(root,16);

newset(root,50);

dfs1(root);

dfs2(root);

find(root);

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...