树和二叉树(学习笔记)

树和二叉树

树是n个结点的有限集。
根——即根节点(没有前驱)
叶子——即终端结点(没有后继)
森林——即m棵不相交的树的集合
有序树,无序树
结点的度——结点挂接的子树数
树的度——所有结点度中的最大值
可以证明,所有树都能转为唯一对应的二叉树
二叉树的基本特点:
1.结点的度≤2
2.有序树
二叉树的性质:
1.在二叉树的第i层上至多有2^(i-1)个结点。
2.深度为k的二叉树至多有2^k-1个结点。
满二叉树,完全二叉树
满二叉树是完全二叉树的一个特例。
3.具有n个结点的完全二叉树的深度必为[log2(n)]+1。
二叉链表:

typedef struct BiNode{
	TElemType data;
	struct BiNode *lchild,*rchild;
}BiNode,*BiTree;

遍历二叉树:
先序遍历——先根再左再右
中序遍历——先左再根再右
后序遍历——先左再右再根
先序遍历实现:

Status PreOrderTraverse(BiTree T){
	if(T==NULL) return OK;
	else{
		cout<<T->data;
		PreOrderTraverse(T->lchild);
		PreOrderTraverse(T->rchild);
	}
}

中序遍历实现:

Status PreOrderTraverse(BiTree T){
	if(T==NULL) return OK;
	else{
		PreOrderTraverse(T->lchild);
		cout<<T->data;
		PreOrderTraverse(T->rchild);
	}
}

后序遍历实现:

Status PreOrderTraverse(BiTree T){
	if(T==NULL) return OK;
	else{
		PreOrderTraverse(T->lchild);
		PreOrderTraverse(T->rchild);
		cout<<T->data;
	}
}

遍历算法的分析:
时间效率:O(n)
空间效率:O(n)
二叉树的建立:

void CreateBiTree(BiTree &T){
	cin>>ch;
	if(ch=='#') T=NULL;
	else{
		T=new BiNode;
		T->data=ch;
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
}

计算二叉树结点总数:

int NodeCount(BiTree T){
	if(T=NULL) return 0;
	else return NodeCount(T->lchild)+NodeCount(T->rchild);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值