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