C 已知前序 中序,構建樹

2021-10-09 01:24:57 字數 821 閱讀 1667

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

pre:前序,vin:中序

pre不為空時,第乙個元素一定是根,根據pre[0]在vin中的位置,可以將pre和vin都分為左右兩個子樹。

然後迭代即可

判斷pre是否為空,判斷vin也可。

根據pre[0]在vin中的位置,將pre和vin分別劃分成前後兩個序列,即pre_left,pre_right,vin_left,vin_right

建立樹tree,

tree->left = reconstructbinarytree(pre_left, vin_left);

tree->right = reconstructbinarytree(pre_right, vin_right);

struct treenode };

class solution

}for

(int i =

0; i < root; i++

)for

(int i = root +

1; i < len; i++

) head->left =

reconstructbinarytree

(pre_left, vin_left)

; head->right =

reconstructbinarytree

(pre_right, vin_right)

;return head;}}

;

中序 和前序 後序建樹

基本思路是遞迴,引數是 i,j 是 絕對座標,想對於 整體的座標 參考自 include include include using namespace std string pre abdhlekcfg string mid hldbekafcg string post lhdkebfgca st...

已知前序中序,求後序

思路 先序的遍歷規則為根 左 右,中序的遍歷規則為左 根 右,所以我們在中序中找到與a a必為根 相等的字元,則在中序中g d h b為a的左子樹,e i c j f為a的右子樹,在左子樹和右子樹中,重複前面過程,最後逆向將根列印出來,就是其後序。是乙個遞迴過程 include include us...

leetcode 105 前序,中序建樹

有簡潔版的。可是懶得看。自己寫的這個算是模擬手痠過程了吧,恩。感覺碰到這樣的例子,就是涉及長度加減的,都要拿小資料測一測。class solution int mid 1 for int i ll i rr i if inorder i root val root left find l 1,l m...