二叉樹與遞迴

2021-08-02 05:44:46 字數 1295 閱讀 5953

給中序遍歷和後續遍歷,求從根到葉子權值最小的路徑,的葉子節點的值。若有多條,求葉子最小的。

#include

#include

#include

#include

using

namespace

std;

const

intmaxn =

10005;

struct

node };

intin[maxn

],post[

maxn];

node

* build(

int*in,

int*post,

intn)

intl = p,r = n - p - 1;

if(l > 0)

root->

lc=

build

(&in[

0], &post[

0], l); if

(r > 0)

root->

rc=

build

(&in[p +

1], &post[p], r);

return

root; }

intminsum =

1<<

20,u =

maxn;

//遞迴的時候,函式呼叫的棧其實就記錄了在每個節點,從根至此的sum。

void

dfs(

node

*cur,

intsum)//sum為當前最小值}if

(cur->

lc!=

null

) if

(cur->

rc!=

null)}

intmain()

ss.clear

();ss.

str(

"");

//清空狀態並賦為空串

getline

(cin

,a);

sz = 0;

ss << a;

while

(ss)

node

*root =

build(in

,post

,sz - 1);

minsum= 1

<< 20,

u= maxn;

dfs(root, 0);

printf

("%d\n",u

); }

return0;

}

二叉樹與遞迴

上圖是一顆二叉樹,二叉樹的特點是 二叉樹的每個節點的左右子樹也是一顆二叉樹 需要特殊說明的是,空 也是一顆二叉樹。二叉樹可以拆分為多個小二叉樹,小二叉樹的性質和大二叉樹的性質完全一樣。這種性質和遞迴演算法很相似,遞迴演算法也是把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解。我們...

二叉樹遞迴

我們來看一下二分搜尋樹的釋放,這就是乙個典型的遞迴問題 function destroy node 這個遞迴包括兩個部分,乙個是遞迴終止條件,乙個是遞迴的執行。我們知道遞迴是不斷地將當前函式壓入函式棧,如果沒有if node null return這個終止條件,當函式棧被壓滿之後就會發生棧溢位 棧的...

遞迴二叉樹

1 基本概念 1 節點 結點包含資料和指向其它節點的指標。2 根節點 樹第乙個結點稱為根節點。3 結點的度 結點擁有的子節點個數。4 葉節點 沒有子節點的節點 度為0 5 父子節點 乙個節點father指向另乙個節點child,則child為孩子節點,father為父親節點。6 兄弟節點 具有相同父...