一般的树的创建,兄弟孩子表示法
2009-10-19 18:20
387 查看
#include "iostream"
using namespace std;
/************************************************************************/
/* 树的一般创建,兄弟孩子表示法¨
节点序号1 2 3 4 5 6 7 8 9 10 11 12 13
data 0 0 0 0 0 0 0 0 0 0 0 0 0
parent 0 1 2 2 1 5 6 6 1 9 9 9 12 */
/************************************************************************/
struct TreeNode {
char data;
int NodeFlag;
TreeNode * Leftmost_Child,* Right_Sibling;
};
typedef TreeNode* TPosition;
int treeMap [13][3];
int nodeNum;
queue <TPosition> nodeQueue;
void addNode();
//根据INDEX建立节点
TPosition createNode(int index)
{
TPosition temp=new TreeNode;
temp->data=treeMap[index][1];
temp->NodeFlag=treeMap[index][0];
temp->Leftmost_Child=temp->Right_Sibling=NULL;
return temp;
}
//根据父节点添加子节点
void addNodeToParent(TPosition tempP)
{
bool findFlag=false;
int i,j,k;
//判断是否是叶节点
for ( i=0;i<nodeNum;i++)
{
if (treeMap[i][2]==tempP->NodeFlag)
{
findFlag=true;
break;
}
}
//叶节点返回
if (!findFlag)
{
return;
}
//保存父节点
TPosition parentNode=tempP;
//寻找子节点
for ( i=0;i<nodeNum;i++)
{
tempP=parentNode;
if (treeMap[i][2]==tempP->NodeFlag)
{
if (tempP->Leftmost_Child==NULL)
{
tempP->Leftmost_Child=createNode(i);
addNodeToParent(tempP->Leftmost_Child);
}
else
{
tempP=tempP->Leftmost_Child;
//在节点右树的最右端,添加兄弟节点
while ((tempP->Right_Sibling)!=NULL)
{
tempP=tempP->Right_Sibling;
}
tempP->Right_Sibling=createNode(i);
addNodeToParent(tempP->Right_Sibling);
}
}
}
}
TPosition createTree()
{
int i,j,k;
TPosition root;
root=createNode(0);
TPosition tempP=root;
addNodeToParent(root);
return root;
}
int main()
{
cin>>nodeNum;
int a;
for(int j=0;j<3;j++)
{
for(int i=0;i<nodeNum;i++)
{
cin>>treeMap[i][j];
}
a++;
}
createTree();
return;
}
using namespace std;
/************************************************************************/
/* 树的一般创建,兄弟孩子表示法¨
节点序号1 2 3 4 5 6 7 8 9 10 11 12 13
data 0 0 0 0 0 0 0 0 0 0 0 0 0
parent 0 1 2 2 1 5 6 6 1 9 9 9 12 */
/************************************************************************/
struct TreeNode {
char data;
int NodeFlag;
TreeNode * Leftmost_Child,* Right_Sibling;
};
typedef TreeNode* TPosition;
int treeMap [13][3];
int nodeNum;
queue <TPosition> nodeQueue;
void addNode();
//根据INDEX建立节点
TPosition createNode(int index)
{
TPosition temp=new TreeNode;
temp->data=treeMap[index][1];
temp->NodeFlag=treeMap[index][0];
temp->Leftmost_Child=temp->Right_Sibling=NULL;
return temp;
}
//根据父节点添加子节点
void addNodeToParent(TPosition tempP)
{
bool findFlag=false;
int i,j,k;
//判断是否是叶节点
for ( i=0;i<nodeNum;i++)
{
if (treeMap[i][2]==tempP->NodeFlag)
{
findFlag=true;
break;
}
}
//叶节点返回
if (!findFlag)
{
return;
}
//保存父节点
TPosition parentNode=tempP;
//寻找子节点
for ( i=0;i<nodeNum;i++)
{
tempP=parentNode;
if (treeMap[i][2]==tempP->NodeFlag)
{
if (tempP->Leftmost_Child==NULL)
{
tempP->Leftmost_Child=createNode(i);
addNodeToParent(tempP->Leftmost_Child);
}
else
{
tempP=tempP->Leftmost_Child;
//在节点右树的最右端,添加兄弟节点
while ((tempP->Right_Sibling)!=NULL)
{
tempP=tempP->Right_Sibling;
}
tempP->Right_Sibling=createNode(i);
addNodeToParent(tempP->Right_Sibling);
}
}
}
}
TPosition createTree()
{
int i,j,k;
TPosition root;
root=createNode(0);
TPosition tempP=root;
addNodeToParent(root);
return root;
}
int main()
{
cin>>nodeNum;
int a;
for(int j=0;j<3;j++)
{
for(int i=0;i<nodeNum;i++)
{
cin>>treeMap[i][j];
}
a++;
}
createTree();
return;
}
相关文章推荐
- 将邻接表表示的图转换为孩子兄弟法表示的二叉树
- 构建树(孩子兄弟表示法)
- 孩子兄弟表示法(二叉链表树)
- 普通二叉树转二叉链表(孩子兄弟表示法)
- linux创建文件树,孩子兄弟树(或广义表),创建文件树及其访问
- UVa11732 "strcmp()" Anyone?(Trie树+孩子兄弟表示法)
- 树的孩子兄弟表示法
- 软件设计师2006年11月下午试题5(C语言 树及其孩子-兄弟表示)
- 6-7-树的二叉链表(孩子-兄弟)存储表示-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- UVa 11732 strcmp()函数(左孩子右兄弟表示法)
- 二叉树--兄弟孩子表示法
- 树的左孩子 右兄弟表示法的建立过程 (后序遍历)
- 树的孩子表示法,树的兄弟表示法,树的存储结构详解,数据结构-树的学习(2)
- poj 1192 最优连通子集 树的孩子兄弟表示法+简单树型dp
- 树-孩子兄弟表示法的实现
- 任意有根树的左孩子右兄弟表示法存储
- 使用C++ 和 孩子兄弟表示法实现树
- 树的孩子兄弟表示法
- 树的孩子兄弟表示法
- linux创建文件树,孩子兄弟树(或广义表),创建文件树及其訪问