資料結構 二叉樹的最長路徑問題

2021-10-10 21:40:20 字數 1834 閱讀 9610

題目:

求任意二叉樹中第一條最長的路徑長度,並輸出此路徑上各結點的值。

描述設二叉樹中每個結點的元素均為乙個字元,按先序遍歷的順序建立二叉鍊錶,編寫演算法求出該二叉樹中第一條最長的路徑。

輸入一行資料,為二叉樹的先序序列(序列中元素為『#』時,表示該結點為空)。

輸出第一行為二叉樹的最長路徑長度,第二行為此路徑上從根到葉結點的各結點的值。

思路:(遞迴)

函式longest_path(bitree t,int *path,int &len,int *longestpath,int &longest_len)

//char path 每次迴圈得到的路徑

//char longestpath最長路徑

//int &longest_len最長路徑的大小

//int &len每次迴圈得到的路徑的大小**執行時:遇到的不是葉子結點,該條路徑繼續

path[len++]t->data;再遞迴呼叫該函式,這個節點的左子樹,右子樹;

遇到的時葉子結點時,該條路徑結束,與之前的最長路徑比較,更新最長路徑(可能會);

求最長路徑演算法(核心**)

void

longest_path

(bitree t,

int*path,

int&len,

int*longestpath,

int&longest_len)

longest_len=len;

//longest_len更新 }}

else

//當遇到的不是葉子結點時,該條路徑繼續

}}

全部可執行**

#include

#include

#define max 200

typedef

char telemtype;

typedef

int status;

typedef

struct binode

binode,

*bitree;

void

createbitree

(bitree &t)

//二叉樹的先序建立

}void

longest_path

(bitree t,

int*path,

int&len,

int*longestpath,

int&longest_len)

longest_len=len;

//longest_len更新 }}

else

//當遇到的不是葉子結點時,該條路徑繼續 }}

intmain()

;int longestpath[max]=;

int len=0;

int longest_len=0;

longest_path

(t,path,len,longestpath,longest_len)

;printf

("第一條最長的路徑長度為:%d\n"

,longest_len)

;printf

("路徑為:");

二叉樹最長路徑

先參考最長子序列求解方法,先序遍歷的時候,我們把當前遍歷的分支作為乙個序列,然後利用最長序列的方式求解。遞迴過程中,保留樹的高度,用高度差作為長度。注意遞迴結束時,需要從雜湊表中移除當前節點的值。include include include include const int tag 100 st...

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...