数据结构——二叉树交换左右子树位置(C语言)

    科技2025-07-06  16

    交换二叉树的左右子树 #include<stdio.h> #include<stdlib.h> #include<queue> #include <iostream> #define MAXSIZE 10010 #define ElemType int using namespace std; typedef struct BTNode{ ElemType data; BTNode *lchild,*rchild; }*BTree; //先序建树 BTree CreateTree(){ ElemType ch; printf("输入结点元素值:"); scanf("%d",&ch); if(ch == 0) return NULL; else{ BTree tree=(BTree)malloc(sizeof(BTree)); tree->data=ch; printf("%d 结点左子树\n",ch); tree->lchild=CreateTree(); printf("%d 结点右子树\n",ch); tree->rchild=CreateTree(); return tree; } } //层次遍历 void LayeredOrderTravel(BTree tree){ queue<BTree> queue1; BTree p; if(tree){//树非空 //入队与队列指针(下标)初始化 queue1.push(tree); while(!queue1.empty()){//队列非空 p=queue1.front();//队头元素出队并访问 queue1.pop(); printf("%d ",p->data);//访问 if(p->lchild)//左孩子不为空则入队 queue1.push(p->lchild); if(p->rchild)//右孩子不为空则入队 queue1.push(p->rchild); } } } void ChangeChildTree(BTree tree){ queue<BTree> queue1; BTree p,temp; if(tree){//树非空 //入队与队列指针(下标)初始化 queue1.push(tree); while(!queue1.empty()){//队列非空 p=queue1.front();//队头元素出队并访问 queue1.pop(); temp=p->rchild;//交换左右子树 p->rchild=p->lchild; p->lchild=temp; if(p->lchild)//左孩子不为空则入队 queue1.push(p->lchild); if(p->rchild)//右孩子不为空则入队 queue1.push(p->rchild); } } } int main(){ printf("二叉树的建立\n"); BTree tree; tree=CreateTree(); printf("二叉树的层序遍历\n"); LayeredOrderTravel(tree); printf("\n交换左右子树\n"); ChangeChildTree(tree); printf("二叉树的层序遍历\n"); LayeredOrderTravel(tree); return 0; }

    Processed: 0.012, SQL: 8