先序 中序和後序陣列兩兩結合重構二叉樹

2021-09-11 19:56:37 字數 2595 閱讀 5068

【題目】已知一棵二叉樹的所有節點值都不同,給定這棵二叉樹正確的先序、中序和後序陣列。請分別用三個函式實現任意兩種陣列結合重構原來的二叉樹,並返回重構二叉樹的頭結點。

public

class

preinposttobst

}public

static node preintotree

(int

pre,

int[

] in)

mapmap =

newhashmap

<

>()

;for

(int i =

0; i < in.length; i++

)return

prein

(pre,

0, pre.length -

1, in,

0, in.length -

1, map);}

public

static node prein

(int

pre,

int pi,

int pj,

int[

] in,

int ni,

int nj, map

map)

node head =

newnode

(pre[pi]);

int index = map.

get(pre[pi]);

head.left =

prein

(pre, pi +

1, pi + index - ni, in, ni, index -

1, map)

; head.right =

prein

(pre, pi + index - ni +

1, pj, in, index +

1, nj, map)

;return head;

}public

static node posintotree

(int

pos,

int[

] in)

mapmap =

newhashmap

<

>()

;for

(int i =

0; i < in.length; i++

)return

posin

(in,

0, in.length -

1, pos,

0, pos.length -

1, map);}

public

static node posin

(int

in,

int ni,

int nj,

int[

] pos,

int si,

int sj, map

map)

node head =

newnode

(pos[sj]);

int index = map.

get(pos[sj]);

head.left =

posin

(in, ni, index -

1, pos, si, si + index - ni -

1, map)

; head.right =

posin

(in, index +

1, nj, pos, si + index - ni, sj -

1, map)

;return head;

}public

static node prepostotree

(int

pre,

int[

] pos)

mapmap =

newhashmap

<

>()

;for

(int i =

0; i < pos.length; i++

)return

prepos

(pre,

0, pre.length -

1, pos,

0, pos.length -

1, map);}

public

static node prepos

(int

pre,

int pi,

int pj,

int[

] pos,

int si,

int sj, map

map)

int index = map.

get(pre[

++pi]);

head.left =

prepos

(pre, pi, pi + index - si, pos, si, index, map)

; head.right =

prepos

(pre, pi + index - si +

1, pj, pos, index +

1, sj, map)

;return head;

}}

先序中序後序兩兩結合重建二叉樹

遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,使每乙個結點都被訪問一次,而且只被訪問一次。由於二叉樹是非線性結構,因此,樹的遍歷實質上是將二叉樹的各個結點轉換成為乙個線性序列來表示。設l d r分別表示遍歷左子樹 訪問根結點和遍歷右子樹,則對一棵二叉樹的遍...

通過先序和中序陣列生成後序陣列

題目 已知一棵二叉樹所有的節點值都不同,給定這棵樹正確的先序和中序陣列,不要重建整棵樹,而是通過這兩個陣列直接生成正確的後序陣列。基本思路 根據當前的先序和中序陣列,設定後序陣列最右邊的值,然後劃分出左子樹的先序 中序陣列,以及右子樹的先序 中序陣列,先根據右子樹的劃分設定好後序陣列,再根據左子樹的...

通過先序和中序陣列生成後序陣列

通過先序和中序陣列生成後序陣列 給出一棵二叉樹的先序和中序陣列,通過這兩個陣列直接生成正確的後序陣列。輸入描述 第一行乙個整數 n,表示二叉樹的大小。第二行 n 個整數 a i,表示二叉樹的先序遍歷陣列。第三行 n 個整數 b i,表示二叉樹的中序遍歷陣列。輸出描述 輸出一行 n 個整數表示二叉樹的...