日常刷題之劍指offer 7 重建二叉樹

2021-10-23 20:36:08 字數 1478 閱讀 1439

1.1.1.前序遍歷:先訪問根節點,在前序遍歷左子樹,最後前序遍歷右子樹

1.1.2.中序遍歷:先中序遍歷左子樹,再訪問根節點,最後中序遍歷右子樹

1.1.3.後序遍歷:先後序遍歷左子樹,再後序遍歷右子樹,最後訪問根節點

1.1.4.層序遍歷:從根節點從上往下逐層訪問節點,同一層的節點遵循從左到右順序訪問1.2.1.根據前序遍歷和中序遍歷的結果可以還原二叉樹

(1)前序遍歷結果可以確定根節點,利用前序遍歷確定的根節點和中序遍歷結果可以確定左右子樹的範圍,然後再對確定的左右子樹繼續推導即可還原二叉樹

(2)例子:前序遍歷序列和中序遍歷序列,從前序遍歷的規則可以知道1為根節點,再利用中序遍歷可以知道左子樹是,右子樹是;再分別對左右子樹以此類推,可以得到還原後的二叉樹:

1.2.2.根據後序遍歷和中序遍歷的結果可以還原二叉樹

(1)後序遍歷可以確定根節點,利用後序遍歷確定的根節點和中序遍歷可以確定左右子樹,然後再對確定的左右子樹繼續推導即可還原二叉樹

(2)例子:後序遍歷序列和中序遍歷序列,從後序遍歷的規則可以知道1為根節點,再利用中序遍歷可以知道左子樹是,右子樹是;再分別對左右子樹以此類推,可以得到還原後的二叉樹:

//pre是前序遍歷序列,prel是前序遍歷的左邊界,prer是前序遍歷的右邊界,inl是中序遍歷的左邊界

private treenode reconstructbinarytree

(int

pre,

int prel,

int prer,

int inl)

}

class

treenode

}public

class

solution

return

reconstructbinarytree

(post,

0,post.length -1,

0);}

//post是後序遍歷序列,postl是後序遍歷的左邊界,postr是後序遍歷的右邊界,inl是中序遍歷的左邊界

private treenode reconstructbinarytree

(int

post,

int postl,

int postr,

int inl)

}

leetcode 劍指offer 7 重建二叉樹

問題描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。解題思路 前序遍歷性質 節點按照 根節點 左子樹 右子樹 排序。中序遍歷性質 節點按照 左子樹 根節點 右子樹 排序。根據以上性質,可得出以下推論 前序遍歷的首元素 為 樹的根節點...

劍指offer7 重建二叉樹

輸入一棵二叉樹前序遍歷和中序遍歷的結果,請重建該二叉樹。注意 二叉樹中每個節點的值都互不相同 輸入的前序遍歷和中序遍歷一定合法 樣例 給定 前序遍歷是 3,9,20,15,7 中序遍歷是 9,3,15,20,7 返回 3,9,20,null,null,15,7,null,null,null,null...

劍指offer7 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的頭節點。根據先序序列第乙個數確定樹的根節點,在中序序列中找到這個數所在的位置,此處左邊為左子樹,右邊為右子樹,根據遞迴建立二叉樹。...