⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.cpp

📁 参照网上的例子改写的多叉树的读写程序
💻 CPP
字号:
// tree.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "treeOp.h"



/* 测试函数*/
void test_tree();
void write_testcfg();

int main()
{

	write_testcfg();


    /* 调用测试函数*/
    test_tree();

    return 0;
}



void test_tree()
{
    char path[] = "5:31:34:41";                /* 结点 1 的路径        */
    char path2[]= "1:7:9";                        /* 结点 2 的路径      */
    char path3[]= "3:16:20";                    /* 结点 3 的路径      */
    char *pathp = path;                                /* 指向结点路径的指针 */
    
    char *oldpath        = NULL;
    char *nextpath    = NULL;
    char *value            = NULL;                                /* path对应的结点值或第一个类型为 1 的并列结点的路径*/
    int  flag = NODE_IS_LEAF;                            /* 输入输出参数。输入时表示结点内型,取值为 NODE_IS_LEAF(0) 或 NODE_IS_BRANCH(1);若 path 对应的结点为内部结点,并且 path的下一个类型为 flag的结点存在,则 flag 的返回值为 NEXT_NODE_EXIST;flag 在这种情况必须先初始化后再传递给get_value函数*/


    /* 1、定义树根结点*/
    struct tree_node *root = NULL;


//struct tree_node *init_cfg(char *cfg_filepath, char *task_filepath, char **argv, char *direct)


    /* 2、创建树*/
    root = init_cfg( (char*)("test.cfg"), (char*)NULL, (char**)NULL,(char*)("00100"));
    if (NULL == root)
    {
        /* 创建树失败*/
        return ;
    }

    /* 在屏幕上打印没进行任操作之前的整棵树*/
    printf("没进行任操作之前的整棵树:\n");
    print_tree(root,0);
    getchar();
    printf("\n\n");
    

    /**************************
     *  3、获取的值 -- start  *
     **************************/

    /* 获取路径path 对应的结点的值,          */
    /* 如果 path 对应的结点是内部结点,       */
    /* 则得到第一个类型为 flag 的子结点的路径 */
    value = get_value(root, pathp, &flag);
    if (NULL != value)                                /* 如果获取成功*/
    {
        if (NEXT_NODE_EXIST == flag)        /* 得到是下一个并列结点的路径,说明 path 对应的结点是内部结点*/
        {
            printf("路径 %s 对应的结点是内部结点,其下一个并列结点的路径为:%s\n", pathp, value);
            flag = NODE_IS_BRANCH;
            oldpath = (char *)malloc(strlen(value)+1);
            if (NULL == oldpath)
            {
                free(value);
                value = NULL;

                return;
            }                

            strcpy(oldpath, value);

            value = get_value(root, value, &flag);
            if (NULL != value)
            {
                printf("路径  %s 对应的结点是叶子结点,其值为:%s\n", oldpath, value);

                free(value);
                value = NULL;
            }                

            /* 得到 oldpath 路径对应结点的下一个兄弟的路径 */
            nextpath = get_next_path2(root, oldpath, &flag);
            if (NULL != nextpath)
            {
                if (NODE_IS_LEAF == flag)
                    printf("路径 %s 的下一并列路径 (类型是叶子) 为:%s\n", oldpath, nextpath);
                else if (NODE_IS_BRANCH == flag)
                    printf("路径 %s 的下一并列路径 (类型是树枝) 为:%s\n", oldpath, nextpath);
                
                free(nextpath);
                nextpath = NULL;
            }

            free(oldpath);
            oldpath = NULL;
        }
        else
        {
            printf("路径 %s 对应的结点是叶子结点,其值为:%s\n", pathp, value);

            free(value);
            value = NULL;
        }
    } 
    /*----------------------*
     *  3、获取的值 -- end  *
     *--------------------- */

    
    /********************************
     *  4、修改指定结点的 -- start  *
     ********************************/
    //path2[] = "1:7:9"
    pathp = path2;
    if (update_node(root, pathp, "9", "node9's new value"))
    {
        /* 在屏幕上打印进行修改操作之后的整棵树*/
        printf("进行修改操作之后的整棵树:\n");
        print_tree(root,0);
        getchar();
        printf("\n\n");
    }    
    
    /*----------------------------*
     *  4、修改指定结点的 -- end  *
     *--------------------------- */
    

    /******************************
     *  5、插入一个结点 -- start  *
     ******************************/
    pathp = path2;
    if (insert_node(root, pathp, "newnode", "newnode value"))
    {
        /* 在屏幕上打印进行插入操作之后的整棵树 */
        printf("进行插入操作之后的整棵树:\n");
        print_tree(root,0);
        getchar();
        printf("\n\n");
    }

    /*--------------------------*
     *  5、插入一个结点 -- end  *
     *------------------------- */


    /******************************
     *  6、删除一个结点 -- start  *
     ******************************/

    //path3 = "3:16:20"
    pathp = path3;
    if (delete_node(root, pathp))
    {
        /* 在屏幕上打印进行删除操作之后的整棵树 */
        printf("进行删除操作之后的整棵树:\n");
        print_tree(root,0);
        getchar();
        printf("\n\n");
    }

    /*--------------------------*
     *  6、删除一个结点 -- end  *
     *------------------------- */


    uninit(root);
    root = NULL;
}


void write_testcfg()
{
	FILE *fp;
    fp = fopen("test.cfg", "w+");
    if (NULL == fp)
        return;

	fputs("[机组1]\n",fp);
	fputs("  测点=测点1\n",fp);
	fputs("  [测点2]\n",fp);
	fputs("     8=8\n",fp);
	fputs("  [/测点2]\n",fp);
	fputs("  9=9\n",fp);
	fputs("[/机组1]",fp);


    fclose(fp);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -