一、思维导图
![](https://img-blog.csdnimg.cn/direct/cf8dccf7481842fb91f8d44de2faa251.png)
二、习题
作业1:
1、二叉树递归创建
typedef struct Node
{
char data;
struct Node* left;
struct Node* right;
}*Btree;
Btree create_node()
{
Btree s=(Btree)malloc(sizeof(struct Node));
if(s==NULL)
return NULL;
s->data='\0';
s->right=NULL;
s->left=NULL;
return s;
}
Btree create_tree()
{
char element;
printf("输入插入数据");
scanf(" %c",&element);
if(element=='#')
return NULL;
Btree s=create_node();
s->data=element;
s->left=create_tree();
s->right=create_tree();
return s;
}
2、二叉树先中后序遍历
//先序遍历
void first(Btree tree)
{
if(NULL==tree)
return;
printf("%c",tree->data);
first(tree->left);
first(tree->right);
}
//中序遍历
void mid(Btree tree)
{
if(NULL==tree)
return;
mid(tree->left);
printf("%c",tree->data);
mid(tree->right);
}
//后序遍历
void last(Btree tree)
{
if(NULL==tree)
return;
last(tree->left);
last(tree->right);
printf("%c",tree->data);
}
3、二叉树计算节点
//计算深度
int ken(Btree tree)
{
if(NULL==tree)
return 0;
int left=1+ken(tree->left);
int right=1+ken(tree->right);
return left>right?left:right;
}
4、二叉树计算深度
//计算个数
void count(Btree tree,int *n0,int *n1,int *n2)
{
if(NULL==tree)
return;
if(!tree->right && !tree->left)
++*n0;
if(tree->right && tree->left)
++*n2;
else
{
++*n1;
}
count(tree->left,n0,n1,n2);
count(tree->right,n0,n1,n2);
}
作业2:编程实现快速排序降序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int one(int *p,int low,int high)
{
int key=*(p+low);
while(low<high)
{
while(low<high && *(p+high)<=key)
{
high--;
}
*(p+low)=*(p+high);
while(low<high&&*(p+low)>=key)
{
low++;
}
*(p+high)=*(p+low);
}
*(p+low)=key;
return low;
}
void fast(int *p,int low,int high)
{
if(low>=high)
return;
int index=one(p,low,high);
fast(p,low,index-1);
fast(p,index+1,high);
}
int main(int argc, const char *argv[])
{
int arr[]={23,12,34,23,43,54,21,10};
int len=sizeof(arr)/sizeof(arr[0]);
fast(arr,0,len-1);
for(int i=0;i<len;i++)
{
printf("%-3d",arr[i]);
}
return 0;
}