劍指 7 重建二叉樹

2021-08-20 03:30:21 字數 2393 閱讀 5923

題目描述

演算法分析

提交**:

class solution 

treenode* reconstructbinarytreecore(vector::iterator start_pre, vector::iterator end_pre, vector::iterator start_vin, vector::iterator end_vin)

//獲取中序遍歷中根節點的位置,也是左子數的長度

int getindexinvin(int rootval, vector::iterator start_vin,

vector::iterator end_vin)

// 兩個序列不同

return -1;

}};

測試**:

#include#include#include "treenode.h"

using namespace std;

/*// 面試題7:重建二叉樹

// 題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸

// 入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出

// 二叉樹並輸出它的頭結點。

*/// ********************測試**********************

void test(char* testname, vector&preorder, vector&inorder)

catch (std::exception& exception) }

// 普通二叉樹

// 1

// / \

// 2 3

// / / \

// 4 5 6

// \ /

// 7 8

void test1()

; vectorinorder = ;

test("test1", preorder, inorder);

}// 所有結點都沒有右子結點

// 1

// /

// 2

// /

// 3

// /

// 4

// /

// 5

void test2()

; vectorinorder = ;

test("test2", preorder, inorder);

}// 所有結點都沒有左子結點

// 1

// \

// 2

// \

// 3

// \

// 4

// \

// 5

void test3()

; vectorinorder = ;

test("test3", preorder, inorder);

}// 樹中只有乙個結點

void test4()

; vectorinorder = ;

test("test4", preorder, inorder);

}// 完全二叉樹

// 1

// / \

// 2 3

// / \ / \

// 4 5 6 7

void test5()

; vectorinorder = ;

test("test5", preorder, inorder);

}// 輸入空指標

void test6()

// 輸入的兩個序列不匹配

void test7()

; vectorinorder = ;

test("test7: for unmatched input", preorder, inorder);

}int main(int argc, char* argv)

劍指offer 樹 7 重建二叉樹

使用雜湊表map記錄中序遍歷每個元素的位置 利用性質 1.先序遍歷的第乙個節點是根節點 2.中序遍歷的根節點的左邊是左子樹,右邊是右子樹 假設左子樹的中序遍歷的長度是len,在前序遍歷中,根節點後面len個數,是左子樹的前序遍歷,剩下的數是右子樹的前序遍歷 根據左右子樹的前序遍歷和中序遍歷,我們先遞...

劍指04 重建二叉樹

劍指04 重建二叉樹 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。示例1輸入 1,2,3,4,5,6,7 3,2,4,1,6,5,7 返回值解法 definition...

劍指4 重建二叉樹

題目 輸入二叉樹的前序和中序遍歷 且無重複數字 重建二叉樹。思路 二叉樹 val,left,right屬性 遞迴,輸入為陣列,輸出為treenode節點 function reconstructtree pre,mid const rootval pre 0 const node newtreeno...