面試題7 重建二叉樹

2021-10-01 13:47:32 字數 1182 閱讀 8107

題目、重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的頭節點。二叉樹節點的定義如下:

struct binarytreenode

分析前序遍歷序列的第乙個數字1就是根節點的值。掃瞄中序遍歷序列,就能確定根節點的值的位置。根據中序遍歷的特點,在根節點的值1前面的3個數字都是左子樹節點的值,位於1後面的數字都是右子樹節點的值。

由於在中序遍歷序列中,有3個數字是左子樹節點的值,因此左子樹公有3個左子節點。同樣,在前序遍歷序列中,根節點後面的3個數字就是3個左子樹節點的值,再後面的所有數字都是右子樹節點的值。這樣我們就在前序遍歷序列和中序遍歷序列中分別找到了左子樹、右子樹對應的子串行。以此類推,接下來可以用遞迴的方法去完成。

完整**

public

class

buildtree

;//前序遍歷序列

int[

] in =

;//中序遍歷序列

//返回後序遍歷結果

treenode t = c.

construct

(pre,in)

; system.out.

println

("後序遍歷結果為:");

c.lastorder

(t);

}//通過前序和中序遍歷序列重建二叉樹

public treenode construct

(int

pre,

int[

] in)

if(pre.length ==

0||in.length ==0)

if(pre.length != in.length)

treenode root =

newtreenode

(pre[0]

);//根節點為前序遍歷的第乙個

for(

int i =

0;ireturn root;

}//後序遍歷結果 重建後的二叉樹後序遍歷方式輸出二叉樹

public

void

lastorder

(treenode t)}}

class

treenode

}

面試題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 重建二叉樹

一 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出圖2.6所示的二叉樹並輸出它的頭結點。二 關鍵 根據前序找根節點,從而在中序中找到左子樹對應的序列,右子樹對應的序列。三 解釋 四 i...

面試題7 重建二叉樹

面試題7 重建二叉樹 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸 入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出 圖所示的二叉樹並輸出它的頭結點。假裝有圖.jpg 1 2 3 4 5 6 7 8 在preorder inord...