重建二叉樹結構,給定了前序和中序,重建樹形結構
#include #include執行結果:using
namespace
std;
/*給定前序,中序,重建樹結構
例如假定:
前序:adbcef
中序:dbaecf
後序:dbefca
*/struct
node;
//遞迴構建樹
node* rebuild(char *ppreorderstart,char* ppreorderend,char* pinorderstart,char *pinorderend)
char* rootinorder =pinorderstart;
while(rootinorder != pinorderend && *rootinorder != root->chvalue)rootinorder++;
if(rootinorder == pinorderend && root->chvalue != root->chvalue)return
null;
int leftlen = rootinorder -pinorderstart;
char* leftpreorderend = ppreorderstart+leftlen;
if (leftlen > 0
)
if (leftlen < ppreorderend -ppreorderstart)
return
root;}//
重建樹void rebuildtree(char *ppreorder,char *pinorder,int ntreelen,node**proot)
//先根遍歷
void prerootview(node*root)
if (root->pright !=null )
}//中根遍歷
void inrootview(node*root)
cout
if (root->pright !=null )
}//後根遍歷
void afrootview(node*root)
if (root->pright !=null )
cout
}int main(int argc, char **ar**)
字串陣列構建樹結構
源資料 let srclist 動物 昆蟲 螞蟻 動物 昆蟲 植物 草 綠色 植物 花 紅色 植物 花 黃色 去重分類 構建樹形資料如下 避免多根將每一條分類資訊路徑,視為容器陣列內的元素 使用固定指標記錄目標根位置,游標指標匹配節點,移動 新增節點之前判斷是否有同名節點存在,存在則進入其下層子節點...
繪製樹結構
樹的表示方法有雙親表示法 孩子表示法 雙親孩子表示法 孩子兄弟表示法,具體請參考其中前三種基於陣列,最後一種基於鍊錶。我定義的數節點資料結構為 typedef struct treenode treenode,ptreenode 也就是孩子兄弟表示法,附加乙個指向父節點的指標。參考上圖,發現第乙個子...
樹結構備份
為每個樹枝建立葉子結點 private void createbranch stringbuffer treemap,int parentid,list alist 在錄入結點資料時可以提前錄入結點下是否有子結點的資訊,這樣如果該結點下面沒有子結點,就不用再去遞迴,可以提公升效率 if map.ge...