算法二

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;

}

猜你喜欢

转载自blog.csdn.net/qq_37400096/article/details/83116257