想在牛客網上寫此題目,此處
題目描述:
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
分析:
前序遍歷:根節點 -> 左子樹 -> 右子樹
中序遍歷:左子樹 -> 根節點 -> 右子樹
後序遍歷:左子樹 -> 右子樹 -> 根節點
當我們知道了前序遍歷和中序遍歷之後,我們可通過其遍歷規則,將二叉樹重建:
確定樹的根節點:前序遍歷的第乙個結點就是二叉樹的根節點
求解樹的左右子樹:找到根節點在中序遍歷中的位置,根節點左邊是二叉樹的左子樹,根節點的右邊時二叉樹的右子樹;如果根節點的左邊或右邊為空,那麼方向的子樹為空;如果根節點的左邊和右邊都為空,那麼該節點時葉子節點。
對左右子樹分別進行1,2兩個步驟,直至求出完整的二叉樹結構為止。
**如下:
/**
* definition for binary tree
* public class treenode
* }*//*
前序遍歷:根結點 -> 左子樹 -> 右子樹
中序遍歷:左子樹 -> 根節點 -> 右子樹
*/public
class
solution
public treenode reconstructbinarytree
(int
pre,
int startpre,
int endpre,
int[
] in,
int startin,
int endin)
// 根據前序遍歷結果,建立根節點
treenode root =
newtreenode
(pre[startpre]);
// 根節點為:1
// 在中序遍歷的結果中找到根節點,找到其左右結點
// 中序結果分離: 對應的前序遍歷
// 左子樹:4 7 2 2 3 7
// 右子樹:5 3 8 6 3 5 6 8
for(
int i = startin; i <= endin; i++)}
return root;
}}
已知前序或後續遍歷和中序遍歷重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。struct treenode class solution 中序遍歷根節點左邊的排序是左子樹的中序遍歷 for int ...
前序遍歷和中序遍歷重建二叉樹
根據先序序列和中序序列的特點我們可以知道 1 先序的第乙個節點是根節點 2 在中序序列中,根結點前邊的結點都是左子樹中的,根結點右邊的結點都是右子樹中的 3 通過左右子樹的中序序列帶入前序序列可以求出左右子樹的前序序列 4 左右子樹的前序序列第乙個元素分別是根節點的左右孩子 5 可以遞迴上述步驟來重...
已知前序遍歷和中序遍歷求二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請輸出後序遍歷序列。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,重建二叉樹並返回後序遍歷序列 輸入某二叉樹的前序遍歷和中序遍歷的結果 輸出後序遍歷序列 1 2 4 7 3 5 6 8 4 7 2 1 5 3 8 6...