二叉樹最大葉子結點到最小葉子結點的最短距離

2021-09-26 05:10:08 字數 1180 閱讀 9570

有一棵二叉樹,樹上每個點標有權值,權值各不相同,請設計乙個演算法算出權值最大的葉節點到權值最小的葉節點的距離。二叉樹每條邊的距離為1,乙個節點經過多少條邊到達另乙個節點為這兩個節點之間的距離。

給定二叉樹的根節點root,請返回所求距離。

解法:先利用getmaxandmin函式找到葉子結點中最大值和最小值對應的結點,然後利用tree函式,遞迴返回乙個pair,第乙個值是標誌位,為1表示當前節點是最大值或最小值的祖先,第二個值是當前節點到最大值或最小值路徑上經過的結點數。若左右子樹的tree函式的返回值中first的值都為1時,表示當前節點是最大值和最小值的最近公共祖先,更新ans=pl.second+pr.second;

class

solution

if(root-

>val}getmaxandmin

(root-

>left)

;getmaxandmin

(root-

>right);}

pair<

int,

int>

tree

(treenode* root,treenode* p, treenode* q)

pair<

int,

int> pl=

tree

(root-

>left,p,q)

; pair<

int,

int> pr=

tree

(root-

>right,p,q);if

(root-

>val==p-

>val||root-

>val==q-

>val)

return

make_pair(1

,1);

if(pl.first==

1&&pr.first==1)

else

if(pl.first==

1&&pr.first==0)

else

if(pl.first==

0&&pr.first==1)

return

make_pair(0

,0);

}int

*mindistance

(treenode* root)

};

求二叉樹中從根結點到葉子結點的路徑

實驗題目 求二叉樹中從根結點到葉子結點的路徑 實驗目的 掌握二叉樹遍歷演算法的應用,熟練使用先序 中序 後序3種遞迴 和非遞迴遍歷演算法以及層次遍歷演算法進行二叉樹問題求解。實驗內容 設計程式,完成如下功能 1 採用先序遍歷方法輸出所有從葉子結點到根結點的逆路徑 2 採用先序遍歷方法輸出第一條最長的...

輸出二叉樹中所有從根結點到葉子結點的路徑

輸出二叉樹中所有從根結點到葉子結點的路徑.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std struct btnode 先序建立二叉樹 void creatbtree btnode root else 輸出二...

輸出二叉樹中所有從根結點到葉子結點的路徑

輸出二叉樹中所有從根結點到葉子結點的路徑.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std struct btnode 先序建立二叉樹 void creatbtree btnode root else 輸出二...