一、題目
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出圖2.6所示的二叉樹並輸出它的頭結點。
二、關鍵
根據前序找根節點,從而在中序中找到左子樹對應的序列,右子樹對應的序列。
三、解釋
四、**
#include "..\utilities\binarytree.h"
#include #include binarytreenode* constructcore(int* startpreorder, int* endpreorder, int* startinorder, int* endinorder);
binarytreenode* construct(int* preorder, int* inorder, int length)
binarytreenode* constructcore
( int* startpreorder, int* endpreorder,
int* startinorder, int* endinorder
) // 在中序遍歷中找到根結點的值(下面2行關鍵)
int* rootinorder = startinorder;
while(rootinorder <= endinorder && *rootinorder != rootvalue)
++ rootinorder;
//處理根節點值有誤的情況
if(rootinorder == endinorder && *rootinorder != rootvalue)
throw std::exception("invalid input.");
int leftlength = rootinorder - startinorder; //以下都關鍵
int* leftpreorderend = startpreorder + leftlength;
if(leftlength > 0)
if(leftlength < endpreorder - startpreorder)
return root;
}// ********************測試**********************
void test(char* testname, int* preorder, int* inorder, int length)
catch(std::exception& exception)
}// 普通二叉樹
// 1
// / \
// 2 3
// / / \
// 4 5 6
// \ /
// 7 8
void test1()
; int inorder[length] = ;
test("test1", preorder, inorder, length);
}// 所有結點都沒有右子結點
// 1
// /
// 2
// /
// 3
// /
// 4
// /
// 5
void test2()
; int inorder[length] = ;
test("test2", preorder, inorder, length);
}// 所有結點都沒有左子結點
// 1
// \
// 2
// \
// 3
// \
// 4
// \
// 5
void test3()
; int inorder[length] = ;
test("test3", preorder, inorder, length);
}// 樹中只有乙個結點
void test4()
; int inorder[length] = ;
test("test4", preorder, inorder, length);
}// 完全二叉樹
// 1
// / \
// 2 3
// / \ / \
// 4 5 6 7
void test5()
; int inorder[length] = ;
test("test5", preorder, inorder, length);
}// 輸入空指標
void test6()
// 輸入的兩個序列不匹配
void test7()
; int inorder[length] = ;
test("test7: for unmatched input", preorder, inorder, length);
}int main(int argc, char* argv)
面試題7 重建二叉樹
對vector使用指標 include include include using namespace std int main vector seq 3 vector curr 0 for int j 0 j 3 j getchar struct treenode struct listnode ...
面試題7 重建二叉樹
面試題7 重建二叉樹 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸 入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出 圖所示的二叉樹並輸出它的頭結點。假裝有圖.jpg 1 2 3 4 5 6 7 8 在preorder inord...
面試題7 重建二叉樹
題目 重建二叉樹 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的頭節點。二叉樹節點的定義如下 struct binarytreenode 分析前序遍歷序列的第乙個數字1就是根節...