【学习笔记】关于二叉树
这是以二叉链表为基础的学习记录
结点定义如下:
typedef struct node
{
char date;
struct node *lc,*rc;
} tree,*tr;
其中data只是表示数据域,应用是根据情况修改。*lc和*rc为左子树指针和右子树指针。
先序遍历函数,变量向上对应。
void xian(tr t)
{
if(t!=NULL)
{
printf("%c",t->data);
xian(t->lc);
xian(t->rc);
}
}
中序遍历函数,变量向上对应。
void zhong(tr t)
{
if(t!=NULL)
{
zhong(t->lc);
printf("%c",t->data);
zhong(t->rc);
}
}后序遍历函数,变量向上对应。
void hou(tr t)
{
if(t!=NULL)
{
hou (t->lc);
hou(t->rc);
printf("%c",t->data);
}
}
按层次遍历函数,变量向上对应。
void ceng (tr t)
{
int rear = 1,front = 0;
tree *p[52];
p[0] = t;
while(rear>front)
{
if(p[front])
{
printf("%c",p[front]->date);
p[rear] = p[front]->lc;
rear++;
p[rear] = p[front]->rc;
rear++;
front++;
}
else
front++;
}
}
注释:通过一个指针数组来实现队列思想,也相当于最后依次输出指针数组指向的节点的数据域内容。
叶子节点计数函数。
上文中count没有定义;为一全局变量,起计数作用,主函数可输出。
void leaf(tr t)
{
if(t!=NULL)
{
if(t->lc==NULL&&t->rc==NULL)
{
count++;
}
else
{
leaf(t->lc);
leaf(t->rc);
}
}
}
二叉树深度计算函数,说是计算,实际上就是找返回值最大的。
int deep (tr t)
{
if(t!=NULL)
{
int a = deep(t->lc),b = deep(t->rc);
if(a>b)
{
return a+1;
}
else
{
return b+1;
}
}
else
{
return 0;
}
return 0;
}
最终返回值就是深度。

浙公网安备 33010602011771号