数据结构:二叉树的储存及遍历

线型

       表:线型的特点无特殊要求

              顺序:查询,修改方便,插入,删除不方便,定长浪费空间

            链式:查询,修改不方便,插入,删除方便,节约空间灵活

       栈:满足线型的条件下,还要满足先进后出

              顺序:定长浪费空间

              链式:节约空间灵活

       队列:满足线型的条件下,还要满足先进先出

            顺序:定长浪费空间

            链式:节约空间灵活

n(n>=0)个结点的集合,这些节点互不相交,有一个根节点

                        根节点没有直接前驱,有n(>=0)个直接后继

            其他节点,有唯一之前前驱,有n(>=0)个直接后继

     

      层次:根节点开始依次向下计数

      树的深度:最大层次节点的层次

      度:直接后继的个数

      树的度:最大度

      叶子节点/外部节点:度为0

      分支节点/内部节点:度不为0

      关系:双亲,兄弟,堂兄弟,祖先

二叉树:

由一个根节点,和左右两颗子树组成,并且这两颗子树又是二叉树;度最大为2;需要区分左右的顺序。 

满二叉树:

有K层的树,节点总数为2^k – 1

完全二叉树:1.只有最后两层有叶子节点

            2.并且叶子节点在左部连续

                      

霍夫曼树,平衡二叉树,红黑树,B树,B+树,A树,233树

存储

            顺序存储:根节点为n,左孩子为2n+1,右孩子为2n+2

            链式存储:

遍历

          层次遍历

            先序遍历   (根左右)

            中序遍历   (左根右)

            后序遍历   (左右根)

#ifndef _SQTREE_H
#define _SQTREE_H

#define N 1024

typedef char sqtree_data_t;

typedef struct sqtree{
	sqtree_data_t buf[N];
	int len;
}sqt_node,*sqt_pnode;

//创建空间
sqt_pnode create_space();
//创建树
int create_sqtree(sqt_pnode T, int pos);
//打印树
int show_sqtree(sqt_pnode T);

#endif
#include <stdio.h>
#include <stdlib.h>
#include "sqtree.h"


sqt_pnode create_space()
{
	sqt_pnode T = (sqt_pnode)malloc(sizeof(sqt_node));
	if(NULL == T)
	{
		printf("T is NULL\n");
		return NULL;
	}
	
	T->len = 0;
	
	return T;
}

int create_sqtree(sqt_pnode T, int pos)
{
	sqtree_data_t ch;
	scanf("%c", &ch);
	//退出条件
	if(ch == '$')
	{
		T->buf[pos] = '#';
		T->len++;
		return 0; 
	}
	
	T->buf[pos] = ch;
	T->len++;
	//创建左子树
	create_sqtree( T, 2*pos+1);
	//创建右子树
	create_sqtree(T, 2*pos+2);
	
	return 0;
}

int show_sqtree(sqt_pnode T)
{
	if(NULL == T)
	{
		printf("T is NULL\n");
		return -1;
	}
	
	if(T->len == 0)
	{
		printf("T is empty\n");
		return -1;
	}
	
	int i;
	for(i = 0; i < T->len; i++)
	{
		printf("buf[%d]=%c ", i, T->buf[i]);
	}
	puts("");
	
	return 0;
}
int main()
{
	sqt_pnode T = create_space();
	
	create_sqtree(T,0);
	
	show_sqtree(T);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

এ᭄星辰

混口饭吃。。。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值