zoukankan      html  css  js  c++  java
  • 二叉树的左右子树交换

    这本是个简单问题,但网上却没有个统一的说法

    C++语言: Codee#22991
    #include <stdio.h>
    #include <malloc.h>

    typedef struct node
    {
        char data;
        struct node *lchild;
        struct node *rchild;
    } BTNode;
    void CreateBTNode(BTNode * &b, char *str)
    {
        BTNode *St[10086], *p = NULL;
        int top = -1, k, j = 0;
        char ch;
        b = NULL;
        ch = str[j];
        while (ch != '\0')
        {
            switch(ch)
            {
            case '(':
                top++;
                St[top] = p;
                k = 1;
                break;
            case ')':
                top--;
                break;
            case ',':
                k = 2;
                break;
            default:
                p = (BTNode *)malloc(sizeof(BTNode));
                p->data = ch;
                p->lchild = p->rchild = NULL;
                if (b == NULL)
                    b = p;
                else
                {
                    switch(k)
                    {
                    case 1:
                        St[top]->lchild = p;
                        break;
                    case 2:
                        St[top]->rchild = p;
                        break;
                    }
                }
            }
            j++;
            ch = str[j];
        }
    }

    void DispBTNode(BTNode *b, int dep)
    {
        if (b != NULL)
        {
            DispBTNode(b->lchild, dep + 2);
            printf("%.*s%c\n",  dep, "                 ", b->data);
            DispBTNode(b->rchild, dep + 2);
        }
    }
    void exch_pre(BTNode* b)
    {
        BTNode* tmp;
        if(b)
        {
            tmp = b->lchild;
            b->lchild = b->rchild;
            b->rchild = tmp;
            exch_pre(b->lchild);
            exch_pre(b->rchild);
        }
    }

    void exch_in(BTNode* b)
    {
        BTNode* tmp;
        if(b)
        {
            exch_pre(b->lchild);
            tmp = b->lchild;
            b->lchild = b->rchild;
            b->rchild = tmp;
            exch_pre(b->lchild);     //!!!!!!!
        }
    }

    void exch_post(BTNode* b)
    {
        BTNode* tmp;
        if(b)
        {
            exch_pre(b->lchild);
            exch_pre(b->rchild);
            tmp = b->lchild;
            b->lchild = b->rchild;
            b->rchild = tmp;
        }
    }
    void exch_lv(BTNode* b)
    {
        BTNode* tmp_q[10086];
        BTNode* ptr;
        BTNode* t;
        int front, rear;
        front = rear = 0;
        tmp_q[++rear] = b;
        while(front < rear)
        {
            ptr = tmp_q[++front];
            t = ptr->lchild;
            ptr->lchild = ptr->rchild;
            ptr->rchild = t;
            if(ptr->lchild)
                tmp_q[++rear] = ptr->lchild;
            if(ptr->rchild)
                tmp_q[++rear] = ptr->rchild;
        }
    }




    int main()
    {
        BTNode *b;
        CreateBTNode(b, "A(B(D,E),C(,F))");
        printf("每次都是在上次交换的基础上再交换\n");
        printf("0.初始状态\n");
        DispBTNode(b, 0);
        puts("\n______________________________\n");

        exch_pre(b);
        printf("1.先序交换\n");
        DispBTNode(b, 0);
        puts("\n______________________________\n");

        exch_in(b);
        printf("2.中序交换\n");
        DispBTNode(b, 0);
        puts("\n______________________________\n");

        exch_post(b);
        printf("3.后序交换\n");
        DispBTNode(b, 0);
        puts("\n______________________________\n");

        exch_lv(b);
        printf("4.层次交换\n");
        DispBTNode(b, 0);
        puts("\n______________________________\n");

        return 0;
    }
  • 相关阅读:
    dos下 批处理 用 pause 可以在最后暂停 查看结果信息 build.bat
    flash jquery 调用摄像头 vue chrome49浏览器
    pandownload 百度网盘 下载
    webpack安装包的时候 1程序目录不要在C盘 2路径不要有中文 3用cnpm
    import * as tools from '@/libs/tools' 导入组件的时候 如果里面都是单独导入的,可以用 *加as起个别名使用
    markdown test
    谷歌浏览器 加安全地址 快捷方式加参数 chrome
    vue validate多表单验证思考 之前写过一个里外层,现在觉得不合适,应该平行的写,然后都给ret,最后判断ret 再做出反应,这样整体表单的所有验证就都报验证,然后最后提交的时候把组件内的对象合并到总的对象,再提交
    js引入的数组 会被页面缓存,如需要被强制性不缓存,请用function return 就ok了
    FiraCode 字体 => 箭头函数变成 整体 还有 等于 不等于
  • 原文地址:https://www.cnblogs.com/invisible/p/2200117.html
Copyright © 2011-2022 走看看