算法二

3.给出一个函数输出一个字符串的所有排列。

/**

利用回溯法

*/

#include

#include<stdio.h>

using
namespace std;

void
swap(char *a,char *b)

{

char t;

t = *a;

*a = *b;

*b = t;

}

void
printAllArange(cahr a[],int n,int index)

{

int i, j;

if( index == n )

{

for(  i=0 ;i<n;i++)

priintf("%c",a[i]);

printf("\n");

return;

}

for(j = index;j<n;j++)

{

swap(&a[index],&a[j]);

printAllArange(a,n,index+1);

swap(&a[index],&a[j]);

}

}

int
main()

{

char a[] = “abcd”;

int len;

len = strlen(a);

printAllArange(a,len,0);

}

4.编写一个程序,把一个有序数组放到二叉树中。

#include

#include<stdio.h>

#include<stdlib.h>

#include

using namespace std;

#define N 101

struct Node

{

int data;

struct Node *left,*right;

}

Node * BuildTree(int
array[],int start,int end)

{

if(start>end)

return NULL;

int m = (start+end)/2;

Node root = (Node)malloc(sizeof(Node));

root -> left = BuildTree(array,start,m-1);

root ->right = BuildTree(array,m+1,end);

return root;

}

//中序遍历

void DisplayMidTree(Node
*head)

{

if(head->left)

DisplayMidTree(head->left);

printf("%d",head->data);

if(head->right)

DisplayMidTree(head>right);

}

//前序遍历

void DisplayPreTree(Node
*head)

{

printf("%d",head->data);

if(head->left)

DisplayPreTree(head->left);

if(head->right)

DisplayPreTree(head>right);

}

//后序遍历

void DisplayBackTree(Node
*head)

{

if(head->left)

DisplayBackTree(head->left);

if(head->right)

DisplayBackTree(head>right);

printf("%d",head->data);

}

int main

{

int array[] = {1,2,3,4,5,6,7,8,};

Node *root;

root = BuildTree(array,0,sizeof(array)/sizeof(int)-1);

printf(“中序遍历:”);

DisplayMidTree(root);

printf("\n");

printf(“前序遍历:”);

DisplayPreTree(root);

printf("\n");

printf(“后序遍历:”);

DisplayBackTree(root);

printf("\n");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值