題目:
給定一棵二叉樹,假定每個節點都用唯一的字元表示,具體結構如下:
struct node ;
假設已經有了前序遍歷和中序遍歷結果,希望通過乙個演算法重建這棵樹。
給定函式的定義如下:
void rebuild(char* ppreorder, char* pinorder, int ntreelen, node** proot); 引數
ppreorder:前序遍歷結果的字串陣列。
pinorder: 中序遍歷結果的字串陣列。
ntreelen: 樹的長度。
proot: 根據前序和中序遍歷結果重新構建樹的根節點。
例如前序遍歷結果:a b d c e f
中序遍歷結果:d b a e c f
思路:不難,根據前序遍歷結果找跟,根據中序遍歷結果劃分左右子樹,遞迴求解。
/*start time = 15:55
end time = 16:23
*/#include
using
namespace
std;
typedef
struct
nodenode;
void rebuild(char* ppreorder, char* pinorder, int ntreelen, node**proot)
if(ntreelen <= 0
)
//重建根節點 一定是先序遍歷的第乙個值
*proot = new
node;
(*proot)->chvalue = ppreorder[0
]; (*proot)->pleft =null;
(*proot)->pright =null;
//查詢根在中序遍歷中的位置,把中序遍歷表轉化為左子樹和右子樹兩個部分
intilocateroot;
for(ilocateroot = 0; ilocateroot < ntreelen; ilocateroot++)
}//重建左子樹
rebuild(ppreorder+1, pinorder, ilocateroot, &((*proot)->pleft));
//重建右子樹
rebuild(ppreorder+ilocateroot+1, pinorder + ilocateroot + 1, ntreelen - ilocateroot - 1, &((*proot)->pright));
}int
main()
;
char
in[7] = ;
node * t =null;
rebuild(pre,
in, 7, &t);
return0;
}
程式設計之美 3 9 重建二叉樹
1.簡述 給定一棵二叉樹,假定每個節點都用唯一的字元表示,具體結構如下 struct node 假設已經有了前序遍歷和中序遍歷結果,希望通過乙個演算法重建這棵樹。給定函式的定義如下 void rebuild char ppreorder,char pinorder,intntreelen,node ...
3 9 重建二叉樹
題目 給定一顆樹的先序遍歷結果和中序遍歷的結果,重建這顆樹。例如 前序 ab d c e f 中序 d bae c f a是根節點。思路 根據前序,可以很快找出根節點a,然後根據中序,可以找出根節點a的左右子樹,然後遞迴求a的左子樹前序b d跟中序d b,a的右子樹前序c e f跟中序e c f即可...
重建二叉樹(程式設計之美)
from 程式設計之美3.9 給出前序遍歷和中序遍歷,重新建立二叉樹,後序遍歷輸出。如下 1 include 2 include 3 4using namespace std 56 struct node7 1213 void aftertra node proot 1419 aftertra pr...