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;
}