#include "iostream"
using namespace std;
#define max 20//定义树的结点数
typedef struct BTNode//定义二叉树结点类型
{
char data;//结点数据类型
struct BTNode *lc,*rc;//左右指针
}BTree;
BTree *createtree(char *str,int i,int m)//将字符串str中第i到第m个字符创建树
{
BTree *p;
if(i >= m)
return 0;
p = (BTree*)malloc(sizeof(BTree));//生成新结点
p->data = str[i];//将结点的第一个数据赋给根
p->lc = createtree(str,2*i+1,m);//创建左子树
p->rc = createtree(str,2*i+2,m);//创建右子树
return (p);
}
BTree *Exchange(BTree *p)//将p指针指向的二叉树的左右子树进行互换。
{
BTree *stack[max];//指针类型的堆栈
int k = 0;
stack[k] = 0;
if(p != NULL)//交换p结点的左右孩子
{
k++;
stack[k] = p->lc;
p->lc = p->rc;
p->rc = stack[k];
p->lc = Exchange(p->lc);
p->rc = Exchange(p->rc);
}
return(p);
}
void PreOrder(BTree *t)//先序遍历
{
if(t != NULL)
{
cout<<t->data;
if(t->lc)
{
cout<<"->";
PreOrder(t->lc);
编写一个递归算法,实现将一棵二叉树的左右孩子互换。
最新推荐文章于 2024-09-29 15:27:31 发布
该博客介绍了如何使用递归算法来交换一棵二叉树的左右子节点。首先定义了二叉树节点结构,然后通过`createtree`函数从字符串中构建二叉树,接着`Exchange`函数实现左右子树的交换,最后通过先序遍历展示交换前后的树结构。代码中包含了创建树、交换节点及先序遍历的功能。
摘要由CSDN通过智能技术生成