重建二叉樹 遞迴求解

2021-10-21 06:20:19 字數 1010 閱讀 7003

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

首先需要明白的基礎知識:下面說一下整體的思路找到根節點在中序遍歷中的索引index拿到該索引後我們可以知道左子樹和右子樹的節點數量

為了節省記憶體空間,我們對左右子樹進行遞迴的時候不再構造新的資料,還使用原始的前序遍歷陣列和中序遍歷陣列,我們只需要拿到各個邊界的索引值就行。

**:

class

solution

treenode node =

helper

(preorder, inorder,

0, n -1,

0, n -1)

;return node;

}public treenode helper

(int

preorder,

int[

] inorder,

int preorderleft,

int preorderright,

int inorderleft,

int inorderright)

}

補充:

為了在遞迴的過程中能夠快速在中序遍歷中找到根節點的索引index, 我們使用乙個map結構來儲存中序遍歷的值和索引,key對應值,value對應索引,這樣我們就只需要在第一次的時候對inorder陣列遍歷即可,後面遞迴的時候通過o(1)的時間複雜度就可以拿到對應的索引。

下面使用一張圖來說明各個邊界的取值:

重建二叉樹(遞迴)

題目很簡單,給你一棵二叉樹的後序和中序序列,求出它的前序序列 so easy 輸入有多組資料 少於100組 以檔案結尾結束。每組資料僅一行,包括兩個字串,中間用空格隔開,分別表示二叉樹的後序和中序序列 字串長度小於26,輸入資料保證合法 每組輸出資料單獨佔一行,輸出對應得先序序列。acbfged a...

重建二叉樹 遞迴實現

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。根據先序 後續 遍歷序列確定根節點,例如先序遍歷,序列的第乙個節點為根節點,這是先序遍歷的特點,然後在中序遍歷序列中找該節點,該節點...

遞迴之重建二叉樹

主要借助這些題加強對遞迴的使用 如下 definition for binary tree struct treenode class solution 對於中序遍歷,根節點左邊的節點位於二叉樹的左邊,根節點右邊的節點位於二叉樹的右邊 利用上述這點,對二叉樹節點進行歸併 for int i 0 i ...