加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【数据结构】二叉树

发布时间:2020-12-15 05:50:13 所属栏目:安全 来源:网络整理
导读:二叉树首先是一棵树,每个节点都不能有多于两个的儿子,也就是树的度不能超过2。二叉树的两个儿子分别称为“左儿子”和“右儿子”,次序不能颠倒。如图1是一个简单的二叉树。 二叉树的种类 一种是满二叉树,除了最后一层的叶子节点外,每一层的节点都必须有

二叉树首先是一棵树,每个节点都不能有多于两个的儿子,也就是树的度不能超过2。二叉树的两个儿子分别称为“左儿子”和“右儿子”,次序不能颠倒。如图1是一个简单的二叉树。


二叉树的种类

一种是满二叉树,除了最后一层的叶子节点外,每一层的节点都必须有两个儿子节点。如图2是一个满二叉树。


另一种是完全二叉树,一棵二叉树去掉最后一层后剩下的节点组成的树为满二叉树,最后一层的节点从左到右连续,没有空出的节点,这样的树称为完全二叉树。如图3是一棵完全二叉树。


二叉树的初始化

因为一棵树有最多只有两个儿子,所以我们可以用指针直接指向他们。一个节点包括值(data)、指向左儿子的指针(lson)和指向右儿子的指针(rson)。 二叉树的插入,删除,查找和链表差不多,不同的是需要指定是左儿子还是右儿子。

二叉树的数组实现也很简单,假如说根节点在arr[0]这个位置,那么它的左儿子就在arr[2*0+1],也就是arr[1]这个位置,它的右儿子在arr[2*0+2] ,也就是arr[2]这个位置。对于下标为i的节点来说,它的左儿子的下标为2*i+1,右儿子的下标为2*i+2。

二叉树的遍历

二叉树的遍历有三种,分别为先序遍历,中序遍历和后序遍历。这三种遍历方式是根据根节点的读取顺序来分的:

先序遍历,就是最先读取根节点,然后再读取左子树(按照同样的方法读取子树上的节点),最后读取右子树;

中序遍历,就是第二个读取根节点,最先要读取的是左子树,然后根节点,最后右子树;

后序遍历,就是最后一个读取根节点,最先读取的是左子树,第二个读取右子树,最后读取根节点。

//定义二叉树结构体
struct treenode{
	int data;
	struct treenode*lson;
	struct treenode*rson;
};

//因为实际问题处理中,树和递归的思想是紧密联系在一起的。
//前、中、后各自遍历的核心在于树根的位置出在三个中哪个位置,左孩子永远高于右孩子
//前序遍历
void insubtree(struct treenode*tree){
	if (tree==NULL)
	{
		return ;
	}
	cout<<tree->data;
	insubtree(tree->lson);//这里体现出了递归的思想,因为在遍历左孩子的时候必须要判断其下还有没有元素。
	//同时也体现了前序遍历不管在哪都是前序遍历
	insubtree(tree->rson);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读