zoukankan      html  css  js  c++  java
  • 交换二叉树中所有结点的左右子树的位置

    #include<stdlib.h>
    #include<stdio.h>
    #include<stack>
    #define N 50
    using namespace std;
    
    typedef struct tree{
        char ch;
        struct tree *lchild;
        struct tree *rchild;
    }BitTree; 
    
    //数组输入
    BitTree *CreateTree(int A[], int i, int n){
        BitTree *bt;
        if(i>n)
            return NULL;
        else{
            bt=(BitTree *)malloc(sizeof(BitTree));
            if(A[i]=='#')
                return NULL;
            bt->ch=A[i];
            bt->lchild=CreateTree(A, 2*i, n);
            bt->rchild=CreateTree(A, 2*i+1, n);
            return bt;
        }
    } 
    
    //层次遍历
    void LayeredOrderTraverse(BitTree *bt);
    
    //交换二叉树中所有结点的左右子树位置
    void ExchangeBT(BitTree *bt){
        BitTree *QUEUE[N], *temp, *p=bt;
        int front = 0, rear = 1;
        if(p != NULL){
            QUEUE[0] = p;
            while(front < rear){
                p = QUEUE[front++];
                temp = p->lchild;
                p->lchild = p->rchild;
                p->rchild = temp;
                if(p->lchild != NULL)
                    QUEUE[rear++] = p->lchild;
                if(p->rchild != NULL)
                    QUEUE[rear++] = p->rchild;
            }
        }
    } 
    
    int main(){
        int A[N]={'#','A','B','C','D','E','#','F','G','H'};
        BitTree *bt=CreateTree(A,1,9);
        printf("pre-LayeredOrderTraverse:
    ");
        LayeredOrderTraverse(bt);
        printf("
    ");
        ExchangeBT(bt);
        printf("post-LayeredOrderTraverse:
    ");
        LayeredOrderTraverse(bt);
        return 0; 
    }
    
    //层次遍历
    void LayeredOrderTraverse(BitTree *bt){
        BitTree *QUEUE[N], *p;
        int front, rear;
        if(bt != NULL){
            QUEUE[0] = bt;
            front = 0;
            rear = 1;
            while(front < rear){
                p = QUEUE[front++];
                printf("%c ", p->ch);
                if(p->lchild != NULL)
                    QUEUE[rear++] = p->lchild;
                if(p->rchild != NULL)
                    QUEUE[rear++] = p->rchild;
            }
        }
    }

  • 相关阅读:
    Linux下使用mtr做路由图进行网络分析
    PHP使用AJAX返回登录成功信息完整参考代码
    ajax提交表单数据不跳转
    帝国cms常用变量总结
    2020软件工程作业04
    2020软件工程作业03
    疑问
    2020软件工程02
    疑问
    2020软件工程作业01
  • 原文地址:https://www.cnblogs.com/exciting/p/10052011.html
Copyright © 2011-2022 走看看