编写一个递归算法,实现将一颗二叉树的左右孩子互换。
2013-11-27 23:53
357 查看
难点创建二叉树,交换,这里均采用递归方法来做。
相信大家一看就懂。
// ChangeChild.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;
typedef char element;
typedef struct bitree
{
element data;
struct bitree* lchild;
struct bitree* rchild;
}bitree;
//交换左右子树
void changechild(bitree* root)
{
//element eleTemp;
bitree* bitTemp;
if (root == NULL)
{
root = NULL;
}
else
{
bitTemp = root->lchild;
root->lchild = root->rchild;
root->rchild = bitTemp;
changechild(root->lchild);
changechild(root->rchild);
}
}
void CreateBiTree(bitree* &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=(bitree *)malloc(sizeof(bitree));
T->data=ch;
cout<<"put in \'"<<T->data<<"\' lchild"<<endl;
CreateBiTree(T->lchild);
cout<<"put in \'"<<T->data<<"\' rchild"<<endl;
CreateBiTree(T->rchild);
}
}//CreateBiTree
void PreTraversal(bitree* T)
{
if (T == NULL)
{
return;
}
else
{
printf("%c,",T->data);
PreTraversal(T->lchild);
PreTraversal(T->rchild);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
bitree* b1 ;
b1= (bitree *)malloc(sizeof(bitree));
bitree* broot;
broot = b1;
printf("enter # is over,put in root node\n");
CreateBiTree(b1);
printf("created tree\n");
PreTraversal(b1);
changechild(b1);
printf("\nafter change lchild ,rchild\n");
PreTraversal(b1);
system("pause");
return 0;
}
相信大家一看就懂。
// ChangeChild.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;
typedef char element;
typedef struct bitree
{
element data;
struct bitree* lchild;
struct bitree* rchild;
}bitree;
//交换左右子树
void changechild(bitree* root)
{
//element eleTemp;
bitree* bitTemp;
if (root == NULL)
{
root = NULL;
}
else
{
bitTemp = root->lchild;
root->lchild = root->rchild;
root->rchild = bitTemp;
changechild(root->lchild);
changechild(root->rchild);
}
}
void CreateBiTree(bitree* &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=(bitree *)malloc(sizeof(bitree));
T->data=ch;
cout<<"put in \'"<<T->data<<"\' lchild"<<endl;
CreateBiTree(T->lchild);
cout<<"put in \'"<<T->data<<"\' rchild"<<endl;
CreateBiTree(T->rchild);
}
}//CreateBiTree
void PreTraversal(bitree* T)
{
if (T == NULL)
{
return;
}
else
{
printf("%c,",T->data);
PreTraversal(T->lchild);
PreTraversal(T->rchild);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
bitree* b1 ;
b1= (bitree *)malloc(sizeof(bitree));
bitree* broot;
broot = b1;
printf("enter # is over,put in root node\n");
CreateBiTree(b1);
printf("created tree\n");
PreTraversal(b1);
changechild(b1);
printf("\nafter change lchild ,rchild\n");
PreTraversal(b1);
system("pause");
return 0;
}
相关文章推荐
- 编写一个递归算法,实现将一棵二叉树的左右孩子互换。
- 试编写一个函数,返回一颗给定二叉树在中序遍历下的最后一个节点(分别用递归和非递归实现)
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 二叉树互换左右孩子
- C#--第2周实验--任务11--编写一个控制台应用--1列数规则如下:1,1,2,3,5,8,13,21,34...求第30位数是多少?(用递归算法实现)
- java实现输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现
- 实现一颗二叉树的层序遍历/给定一个整数N,那么N的阶乘N!末尾有多少个0呢
- 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- 编写一个程序,实现二叉树的各种运算
- 程序员面试金典: 9.4树与图 4.5实现一个函数,检查一颗二叉树是否为二叉查找树
- 假设二叉树采用链接方式存储,编写一个计算一颗二叉树t的高度的函数
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?
- 请编写一个程序,实现将树转化成二叉树。(华为)
- C++作业:将左右孩子互换 / 复制一棵二叉树
- 实验题7.1: 编写一个程序algo7-1.cpp,实现二叉树的各种基本运算,并在此基础上设计一个程序Main.cpp完成如下功能(b为如下图所示的一棵二叉树)
- 查看一颗二叉树的每个节点的值是否都是其左右两个孩子节点值的和
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)