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

2021-07-03 23:43:23 字數 909 閱讀 7528

題目描述

如果我們把二叉樹看成乙個圖,父子節點之間的連線看成是雙向的,我們姑且定義「距離」為兩個節點之間的變數。

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

輸入要求

輸入的第一行包含單獨的乙個數字t,表示測試序列的數目;

以下每一行為乙個測試序列,測試序列是按先序序列輸入字元 ,如果節點沒有左或右孩子,則輸入用空格表示,最後用乙個空格結束一行的輸入。

輸出要求

輸出二叉樹中相距最遠的兩個節點之間的距離

假如輸入

2abc  de g  f    

-+a  *b  -c  d  /e  f   

應當輸出46

借鑑了許多**,最後優deepth()化到最簡已經,思路就是遍歷每個節點,空節點為-1,最終的結果肯定是某個節點左子樹的深度加上右子樹的深度加2,所以求出每個節點左子樹和右子樹的深度,取左右子樹深度之和加2的最大值即可。 

code:

#includeusing namespace std;

typedef struct btree

btree;

btree *creatbtree()

int deepth(btree *t,int &maxdis)

void delbtree(btree *p)

}int main()

{

int t;

cin>>t;

while(t--)

{

getchar();//吃掉回車

int maxdis=-1;

btree *root=creatbtree();

getchar();//吃掉最後結尾的空格

deepth(root,maxdis);

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