二叉树的基本操作

在计算机科学中,二叉树是每个结点最多有两棵子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。

特点:

1、每个节点最多有两棵子树,所以二叉树中不存在度大于2的节点。

2、即使树中某节点只有一棵子树,也要区分是左子树还是右子树。

定义:

1、满二叉树:所有的分支节点都存在左子树和右子树,并且所有的叶子结点都在同一层。

2、完全二叉树:对二叉树编号,如果编号为i(小于树的节点数)的节点与同样深度的满二叉树编号为i的节点位置相同,则这棵树为完全二叉树。

性质:

1、在二叉树第i层上至多有2的(i-1)次个节点(i >0)。

2、深度为k的二叉树至多有2的k次减1个节点(k>0)。

3、对任意一棵二叉树,如果其终端节点数为n0,度为2的节点数为n2,则n0=n2+1。

4、具有n个节点的完全二叉树的深度为[log2n]+1。


二叉树的结构   

typedef struct BtNode 
{
BtNode *leftchild;
BtNode *rightchild;
ElemType data;
}BtNode, *BinaryTree;


基本操作:

BtNode * Buynode()          //创建节点
{
BtNode *s = (BtNode*)malloc(sizeof(BtNode));
if (s == NULL) exit(1);
memset(s, 0, sizeof(BtNode));      //初始化
return s;
}


BtNode * CreateTree1()          //建立二叉树
{
BtNode *s = NULL;
ElemType item;
scanf_s("%c", &item);
if (item != '#')
{
s = Buynode();
s->data = item;
s->leftchild = CreateTree1();
s->rightchild = CreateTree1();
}
return s;
}

BtNode * FindValue(BtNode *ptr, ElemType x)      //查找结点
{
if (ptr == NULL || ptr->data == x)
return ptr;
else
{
BtNode *p = FindValue(ptr->leftchild, x);  
if (p == NULL)
{
p = FindValue(ptr->rightchild, x);       
}
return p;
}
}

bool Equal(BtNode *pa, BtNode *pb)           //判断两颗二叉树相等
{
if (pa == NULL && pb == NULL) ||                                        
(pa != NULL && pb != NULL && pa->data == pb->data && 
Equal(pa->leftchild,pb->leftchild)&&
Equal(pa->rightchild = pb->rightchild))
return 1;
else
return 0;
}

int Size(BtNode *ptr)        //二叉树节点数
{
if (ptr == NULL) return 0; 
else
{
int i = Size(ptr->leftchild);
int j = Size(ptr->rightchild);
return i + j + 1;
}
}


int SizeLeaf(BtNode *ptr)       
//计算叶子节点数
{
int count = 0;
if (ptr == NULL) return 0;
else
{
if (ptr->leftchild == NULL && ptr->rightchild == NULL)
return 1;
else
{
return SizeLeaf(ptr->leftchild)+SizeLeaf(ptr->rightchild);
}
}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值