1、自己实现课上写的代码功能
#include "bitree.h"
int main(int argc, const char *argv[])
{
treelist *P = creat_bitree();
linknode_point *Q = creat_link_tree();
printf("p=%p, q=%p\n", P, Q);
tree_to_link(P, Q, 1);
return 0;
}
#include "bitree.h"
//创建二叉树
treelist *creat_bitree()
{
char flag = '\0';
scanf(" %c", &flag);
if(flag == '#')
{
return NULL;
}
treelist *p = (treelist *)malloc(sizeof(treelist));
if(!p)
{
printf("申请失败\n");
return NULL;
}
p->data = flag;
p->Lchild = creat_bitree();
p->Rchild = creat_bitree();
return p;
}
//创建链式队列
linknode_point *creat_link_tree()
{
linknode_point *p = (linknode_point *)malloc(sizeof(linknode_point));
if(!p)
{
printf("入参为空\n");
return NULL;
}
p->format = NULL;
p->tail = NULL;
return p;
}
//创建节点
linknode *create_node_link_tree()
{
linknode *p = (linknode *)malloc(sizeof(linknode));
if(!p)
{
printf("入参为空\n");
return NULL;
}
p->data = 0;
p->next = NULL;
return p;
}
//尾插
int tail_node_link(linknode_point *p, char in_data)
{
if(!p)
{
printf("入参为空\n");
return -1;
}
linknode *q = create_node_link_tree();
if(!q)
{
printf("入参为空\n");
return -1;
}
if(!p->format)
{
q->data = in_data;
p->format = q;
p->tail = q;
}else
{
q->data = in_data;
p->tail->next = q;
p->tail = q;
}
return 0;
}
//二叉树遍历方式
int tree_to_link(treelist *p, linknode_point *q, int flag)
{
int i = 0;
if(!q)
{
printf("1入参为空, p = %p, q = %p\n", p, q);
return -1;
}
switch(flag)
{
case 1:
i = first_print_tree(p, q);
if(!i)
{
all_printf_tree_link(q);
}
break;
default:
break;
}
}
//先序遍历
int first_print_tree(treelist *p, linknode_point *q)
{
treelist *tmp = p;
if(tmp)
{
tail_node_link(q, tmp->data);
tree_to_link(p->Lchild, q, 1);
tree_to_link(p->Rchild, q, 1);
return 0;
}
return 1;
}
//中序遍历
//后序遍历
//二叉树队列遍历
int all_printf_tree_link(linknode_point *p)
{
if(!p)
{
printf("入参为空\n");
return -1;
}
linknode *tmp = p->format;
while(tmp)
{
printf("%c, ", tmp->data);
tmp = tmp->next;
}
putchar(10);
return 0;
}
#ifndef __BITREE_H__
#define __BITREE_H__
#include <stdio.h>
#include <stdlib.h>
//二叉树结构体
typedef struct bitree
{
char data;
struct bitree *Lchild, *Rchild;
}treelist;
//二叉树遍历所需结构体
typedef struct linknode
{
char data;
struct linknode *next;
}linknode;
typedef struct
{
linknode *format, *tail;
}linknode_point;
//创建二叉树
treelist *creat_bitree();
//创建链式队列
linknode_point *creat_link_tree();
//创建节点
linknode *create_node_link_tree();
//二叉树遍历方式
int tree_to_link(treelist *p, linknode_point *q, int flag);
//先序遍历
int first_print_tree(treelist *p, linknode_point *q);
//中序遍历
//后序遍历
//二叉树队列遍历
int all_printf_tree_link(linknode_point *p);
#endif
2、预习快速排序的相关内容
//快速排序
void quick_sort(int num[], int low, int high )
{
int i,j,temp;
int tmp;
i = low;
j = high;
tmp = num[low]; //任命为中间分界线,左边比他小,右边比他大,通常第一个元素是基准数
if(i > j) //如果下标i大于下标j,函数结束运行
{
return;
}
while(i != j)
{
while(num[j] >= tmp && j > i)
{
j--;
}
while(num[i] <= tmp && j > i)
{
i++;
}
if(j > i)
{
temp = num[j];
num[j] = num[i];
num[i] = temp;
}
}
num[low] = num[i];
num[i] = tmp;
quick_sort(num,low,i-1);
quick_sort(num,i+1,high);
}
3、先序:ABDFGHIEC 中序:FDHGIBEAC画出二叉树
4、计算时间复杂度
·f(n) = 1+5n^2-10n+5
T(n) = O(n^2)
5、思维导图