已知一棵二叉樹的每個節點的值都不同,給定這個二叉樹的先序和中序遍歷陣列,不要重建整棵二叉樹,而知通過給定的陣列直接生成正確的後序陣列。
#include
#include
#include
#include
using
namespace
std;
int setpos(int *prearray, int prebeg, int preend, int *inarray, int inbeg,
int inend, int *posarray, int poslen,map
&inmap)
int i = inmap[prearray[prebeg]];
posarray[poslen--] = prearray[prebeg];
poslen = setpos(prearray, preend-inend + i + 1, preend, inarray, i + 1, inend, posarray, poslen-1, inmap);
return setpos(prearray, prebeg + 1, prebeg + i - inbeg, inarray, inbeg, i - 1, posarray, poslen, inmap);
}bool getposarray(int *pre, int *in, int len, int *pos)
map inmap;
for (int i = 0; i < len; ++i)
setpos(pre, 0, len - 1, in, 0, len - 1, pos, len - 1, inmap);
return
true;
}
路漫漫其修遠兮… 資料結構和演算法經典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。現在給定一棵二叉樹的頭結點,求整棵二叉樹上節點間的最大距離。題...
資料結構和演算法經典100題 第30題
題目要求 先序 中序和後序陣列兩兩結合重構二叉樹已知一棵二叉樹的所有節點都不同,給定二叉樹的先序 中序和後序陣列,請分別用三個函式實現任意兩種組合重構原來的二叉樹,並返回重構二叉樹的頭節點。題目解析 這道題目中,由先序陣列,中序陣列組合重構二叉樹無難度,同理由中序陣列,後序陣列結合重構二叉樹也沒有難...