69,371
社区成员
发帖
与我相关
我的任务
分享
struct ListNode_t
{
struct ListNode_t *prior;
struct ListNode_t *next;
void *data;
};
typedef struct ListNode_t ListNode_t;
struct List_t
{
ListNode_t *head;
ListNode_t *tail;
int count;
};
typedef struct List_t List_t;
struct TreeNode_t
{
struct TreeNode_t *root;
struct TreeNode_t *parent;
struct List_t *child;
int depth;
void *data;
};
typedef struct TreeNode_t TreeNode_t;
struct Tree_t
{
struct TreeNode_t *root;
int depth;
};
typedef struct Tree_t Tree_t;
int TraverseTree(Tree_t *eTree, void (*visit)())
{
if (TreeEmpty(eTree))
return DSC_FAIL;
TraverseNode(eTree->root, visit);
return DSC_OK;
}
void TraverseNode(TreeNode_t *eNode, void (*visit)())
{
visit(eNode);
if (!ListEmpty(eNode->child))
TraverseList2(eNode->child, TraverseChild, visit);
}
void TraverseNode(TreeNode_t *eNode, void (*visit)())
{
visit(eNode);
if (!ListEmpty(eNode->child))
TraverseList(eNode->child, visit);
}
void TraverseList2(List_t *eList, void (*visit)(), void (*visit2)())
{
int i;
for (i=1;i<=eList->count;i++)
visit(GetListNode(eList, i), visit2);
}
void TraverseNode(TreeNode_t *eNode, void (*visit)())
{
visit(eNode);
if (!ListEmpty(eNode->child))
TraverseList2(eNode->child, TraverseChild, visit);
}
void TraverseChild(ListNode_t *eNode, void (*visit)())
{
TraverseNode((TreeNode_t*)eNode->data, visit);
}
void printTree(TreeNode_t *eNode)
{
printf("%d\n", *(int*)eNode->data);
}
int TestTree()
{
int *tmpInt;
Tree_t *tree1;
printf("\n");
printf("\n");
printf("TestTree is start!\n");
printf("\n");
printf("\n");
tree1 = CreateTree();
InitTree(tree1);
CreateTree(tree1);
InsertNullChildNodes(tree1->root, 0, 2);
tmpInt = malloc(sizeof(int));
*tmpInt = 0;
tree1->root->data = tmpInt;
tmpInt = malloc(sizeof(int));
*tmpInt = 1;
((ListNode_t*)GetListNode(tree1->root->child, 1)->data)->data = tmpInt;
tmpInt = malloc(sizeof(int));
*tmpInt = 2;
((ListNode_t*)GetListNode(tree1->root->child, 2)->data)->data = tmpInt;
printf("%d\n", *(int*)tree1->root->data);
printf("%d\n", *(int*)((ListNode_t*)GetListNode(tree1->root->child, 1)->data)->data);
printf("%d\n", *(int*)((ListNode_t*)GetListNode(tree1->root->child, 2)->data)->data);
printf("\n");
printf("\n");
printf("%d\n", *(int*)tree1->root->data);
printf("%d\n", *(int*)((ListNode_t*)GetListNode(tree1->root->child, 1)->data)->data);
printf("%d\n", *(int*)((ListNode_t*)GetListNode(tree1->root->child, 2)->data)->data);
printf("\n");
printf("\n");
TraverseTree(tree1, printTree);
printf("\n");
printf("\n");
printf("TestTree is end!\n");
printf("\n");
printf("\n");
return DSC_OK;
}
printf("%d\n", *(int*)tree1->root->data);
printf("%d\n", *(int*)((ListNode_t*)GetListNode(tree1->root->child, 1)->data)->data);
printf("%d\n", *(int*)((ListNode_t*)GetListNode(tree1->root->child, 2)->data)->data);