資料結構和演算法經典100題 第30題

2021-07-09 06:04:34 字數 1127 閱讀 3254

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

題目解析:

這道題目中,由先序陣列,中序陣列組合重構二叉樹無難度,同理由中序陣列,後序陣列結合重構二叉樹也沒有難度,但是由後序陣列和先序陣列在很多情況下是不能重構出二叉樹的,比如先序陣列是【1,2】,後序陣列是【2,1】,則存在兩種可能的二叉樹結構。只有在二叉樹每個節點的孩子數要麼是0要麼是2的情況下才能構建出二叉樹。

no code say what?

struct node ;

node *createnode(int value)

// 由先序陣列和中序陣列結合構建二叉樹節點.

node *generatenode(int *pre, int prebeg, int preend, int *in, int inbeg,

int inend, map

&inmap)

// 由先序陣列和中序陣列結合構建二叉樹.

node *generatetree(int *pre, int *in, int len)

map inmap;

for (int i = 0; i < len; ++i)

return generatenode(pre, 0, len - 1, in, 0, len - 1, inmap);

}// 由後序陣列和中序陣列結合構建二叉樹節點.

node *generatenode2(int *pos, int posbeg, int posend, int *in, int inbeg,

int inend, map

&inmap)

// 由後序陣列和中序陣列結合構建二叉樹.

node *generatetree2(int *in, int *pos, int len)

map inmap;

for (int i = 0; i < len; ++i)

return generatenode2(pos, 0, len - 1, in, 0, len - 1, inmap);

}

路漫漫其修遠兮,吾將上下而求索…

資料結構和演算法經典100題 第27題

已知一棵二叉樹的每個節點的值都不同,給定這個二叉樹的先序和中序遍歷陣列,不要重建整棵二叉樹,而知通過給定的陣列直接生成正確的後序陣列。include include include include using namespace std int setpos int prearray,int pre...

資料結構和演算法經典100題 第28題

題目要求 表示一棵二叉樹中序遍歷結果,1.求有多少種可能的二叉樹結構?2.返回所有可能的二叉樹結構的頭結點?題目解析 1.乙個關鍵點是 中序遍歷一棵二叉樹結果有序無重複,那麼這棵二叉樹必然是搜尋二叉樹。根據搜尋二叉樹的性質,結點1一定沒有左子樹,所以結點1為頭結點可能的二叉樹結構數目取決於其右子樹的...

資料結構和演算法經典100題 第29題

題目要求 二叉樹節點間的最大距離問題從二叉樹的節點a出發,可以向上走或者向下走,但沿途的節點只能經過一次,當達到節點b時,路徑上的節點數叫作a到b的距離。比如 1 2 3 4 5 6 7節點4和節點2的距離為2,節點5和節點6的距離為5。現在給定一棵二叉樹的頭結點,求整棵二叉樹上節點間的最大距離。題...