程式設計之美 3 9重建二叉樹

2021-09-06 18:23:48 字數 1409 閱讀 2834

題目:

給定一棵二叉樹,假定每個節點都用唯一的字元表示,具體結構如下:

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...