資源簡介
廣義表與森林相互轉換,森林與二叉樹相互轉換,二叉樹與遍歷序列(先序/中序)相互轉換,森林先根遍歷和后根遍歷

代碼片段和文件信息
#include?
#include?
#include?
#include?
using?namespace?std;
//存有孩子結點索引的單鏈表結點
typedef?struct?TreelinkNode
{
????int?index;
????struct?TreelinkNode?*next;
}?TreelinkNode*pTreelinkNode;
//孩子鏈表結點(樹結點)
typedef?struct?TreeNode
{
????pTreelinkNode?link;
????int?data;
}?TreeNode*pTreeNode;
//森林結點
typedef?struct?FTreeNode
{
????pTreeNode?tree;
????struct?FTreeNode?*next;
}?FTreeNode*pFTreeNode;
//森林鏈表的初始化操作
void?InitFTree(pFTreeNode?&fTree)
{
????fTree?=?(pFTreeNode)malloc(sizeof(FTreeNode));
????fTree->next?=?NULL;
}
//森林鏈表的插入操作
void?InsertFTree(pFTreeNode?&fTreepTreeNode?node)
{
????pFTreeNode?t_node?=?fTree;
????pFTreeNode?newnode??=?(pFTreeNode)malloc(sizeof(FTreeNode));
????while(t_node->next?!=?NULL)
????{
????????t_node?=?t_node->next;
????}
????newnode->tree?=?node;
????t_node->next?=?newnode;
????newnode->next?=?NULL;
}
//廣義表建立樹鏈表(孩子鏈表)
void?GListToTree(pTreeNode?&treeint?¤t_indexint?parent_index)
{
????char?ch;
????pTreelinkNode?newnode;
????pTreelinkNode?link?=?(pTreelinkNode)malloc(sizeof(TreelinkNode));
????link->index?=?current_index;
????link->next?=?NULL;
????tree[parent_index].link?=?link;
????while(true)
????{
????????scanf(“%c“&ch);
????????if(ch?==?‘(‘)
????????{
????????????parent_index?=?current_index;
????????????current_index?++;
????????????scanf(“%d“&tree[current_index].data);
????????????tree[current_index].link?=?NULL;
????????????GListToTree(treecurrent_indexparent_index);
????????}
????????else?if(ch?==?‘‘)
????????{
????????????current_index?++;
????????????scanf(“%d“&tree[current_index].data);
????????????tree[current_index].link?=?NULL;
????????????newnode?=?(pTreelinkNode)malloc(sizeof(TreelinkNode));
????????????newnode->index?=?current_index;
????????????newnode->next?=?NULL;
????????????link->next?=?newnode;
????????????link?=?link->next;
????????}
????????else
????????{
????????????return;
????????}
????}
}
//廣義表組建立森林鏈表
void?GListToFTree(pFTreeNode?&fTree)
{
????char?ch;
????int?current_indexparent_index;
????pTreeNode?tree;
????scanf(“%c“&ch);
????while(ch?!=?‘#‘)
????{
????????current_index?=?-1;
????????tree=(pTreeNode)malloc(50*sizeof(TreeNode));
????????current_index?++;
????????scanf(“%d“&tree[current_index].data);
????????tree[current_index].link?=?NULL;
????????scanf(“%c“&ch);
????????if(ch?!=?‘)‘)
????????{
????????????parent_index?=?current_index;
????????????current_index?++;
????????????scanf(“%d“&tree[current_index].data);
????????????tree[current_index].link?=?NULL;
????????????GListToTree(treecurrent_indexparent_index);
????????????scanf(“%c“&ch);
????????}
????????InsertFTree(fTreetree);
????????scanf(“%c“&ch);
????}
}
//存儲先序遍歷序列記錄的單鏈表結點
typedef?struct?linkNode
{
????int?data;
????struct?linkNode?*next;
}?linkNode*plinkNode;
//單鏈表的初始化
void?InitlinkList(plinkNode?&link)
{
????link=(plinkNode)ma
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????I.A....?????14183??2012-03-22?22:13??樹與二叉樹\main.cpp
????I..D...?????????0??2012-04-08?11:11??樹與二叉樹
-----------?---------??----------?-----??----
????????????????14183????????????????????2
- 上一篇:用匯編編寫的10個數的冒泡排序
- 下一篇:基于專家知識的決策樹分類
評論
共有 條評論