1, 什么是树状结构?
其基本定义是:一个或多个节点构成的集合,并且有一个节点为根节点,其余的子节点也都是树结构;
2.二叉树:树中每一个节点的子节点之多为2;
3,树的节点的定义:
typedef struct tnode{
char data;
struct *tnode left,*tnode right;
}TNODE
TNODE *tree //声明了一个树的节点;
4,二叉树的遍历:
先序;root—》left---》right
中序:left—》root—》right
后序:left—》right—》root
中序遍历实例程序:
void inorder(TNODE *p){
if(p!=NULL){
inorder(p->left);
printf(“%c”,p->data);
inorder(p->right);
}
}
//后序遍历的实例代码:
void afterorder(TNODE *p){
if(p!=NULL){
afterorder(p->left);
afterorder(p->right);
printf(“%c”,p->data);
}
}
//先序遍历的实例代码:
void frontorder(TNODE *p){
if(p!=NULL){
printf(“%c”,p->data);
frontorder(p->left);
frontorder(p->right);
}
}
5:中序遍历二叉树的使用----排序
用待排序的各个数据元素,建立这样一棵树:其节点的值是按 LEFT ROOT RIGHT 有序排列的。然后对此树进行中序遍历就得到有序排序;具体步骤如下:
(1) 以第一个数据元素作为根元素
(2) 把剩余的元素与根节点进行比较大小,大则放其右边,小则放其左边,这样循环下去;
(3) 中序遍历新建树;
写了一个单片机中断的程序:就是发送一个字符,然后会中断输出相应内容,可是这个程序只能实现一次,就是第二次不进入中断,百思不得其解?
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED=P0^0;
uchar a;
void delay(uint x)
{
uchar i;
while(x--)
for(i=0; i<120; i++);
}
//接收中断子程序
void suart()interrupt 4 using 1
{
uchar a;
a=SBUF;
switch(a)
{
case 'C': LED=~LED; SBUF=0x11; delay(500); break;
case 'D': LED=~LED; SBUF=0x22; delay(500); break;
}
RI=0;
}
void main()
{
delay(500);
P0=0x00;
TMOD=0x20;//SETUP T1 AT MODE 2,自动重载八位定时器
PCON=0x00;
SCON=0x70;//串口模式1
TH1=TL1=0XFD;//定时器初值
TR1=1;//启动定时器1,SETB TR1;
IE=0X90;//打开总中断和串口总中断,10010000
while(1);
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
最后发现:串口输出也是中断。。。。。。。。。