编写一个递归算法,实现将一棵二叉树的左右孩子互换。
2013-11-26 15:43
260 查看
#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); } if(t->rc) { cout<<"->"; PreOrder(t->rc); } } } int main() { int i,n; char str[max]; BTree *root;//二叉树根结点的指针 cout<<"请输入结点数目n:"; cin>>n; cout<<endl; cout<<"请输入"<<n<<"个结点:"; for(i = 0;i < n;i++) cin>>str[i]; root = createtree(str,0,n); //创建树 cout<<"交换前树的先序遍历:"; PreOrder(root); cout<<endl; root = Exchange(root);//交换左右子树 PreOrder(root); cout<<"交换后树的先序遍历:"; system("pause"); }
相关文章推荐
- 编写一个递归算法,实现将一颗二叉树的左右孩子互换。
- 实验题7.1: 编写一个程序algo7-1.cpp,实现二叉树的各种基本运算,并在此基础上设计一个程序Main.cpp完成如下功能(b为如下图所示的一棵二叉树)
- C++作业:将左右孩子互换 / 复制一棵二叉树
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现
- 编写一个程序,实现二叉树的各种运算
- C#--第2周实验--任务11--编写一个控制台应用--1列数规则如下:1,1,2,3,5,8,13,21,34...求第30位数是多少?(用递归算法实现)
- 二叉树互换左右孩子
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 试编写一个函数,返回一颗给定二叉树在中序遍历下的最后一个节点(分别用递归和非递归实现)
- 请编写一个程序,实现将树转化成二叉树。(华为)
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?
- 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- 八.二叉树各种操作的C语言实现 二叉树中各种遍历的非递归和递归算法的实现
- C语言:编写一个函数实现n^k,使用递归实现
- 编写一个函数reverse_string(char * string)(递归实现)
- 求二叉树中某结点的父结点(左右孩子表示法)
- “好程序员笔记”关于对象的比较以及一个二叉树的实现
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树