如果我們把二叉樹看成乙個圖,
父子節點之間的連線看成是雙向的,
我們姑且定義"距離"為兩節點之間邊的個數。
寫乙個程式,
求一棵二叉樹中相距最遠的兩個節點之間的距離。
解題思路:這是一道經典的樹形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...