从一个初学者看树

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 从一个初学者看树,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

树的基本定义

树(tree)可以用几种方式定义。定义树的一种自然的方式是递归的方法。一棵树是一些结点的集合。这个集合可以是空集;若不是空集,则树由称作根(root)的结点r以及零个或多个非空的(子)树T,T,…,T组成,这些子树中每一棵的根都被来自根r的一条有向的边(edge)所连接。

叶子节点:没有左孩子和右孩子

非叶节点:有child

深度:对任意结点n,ni的深度( depth)为从根到n0的唯一路径的长

高度:( height)是从ni到一片树叶的最长路径的长.

树的实现

struct TreeNode
{
 object element;
 TreeNode* firstchild;
 TreeNode* nextSlibing;

};

从一个初学者看树

 树的遍历

前序 中 左 右

中序 左 中 右

后序 左 右 中

代码 前序

void traversal(TreeNode* root)
{
vector<int>vec;
if(root=nullptr)return;
vec.push_back(root->val);
traversal(root->left);
traversal(root->right);
}

 二叉树(binary tree)

满二叉树

满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。

如图所示:

从一个初学者看树

 完全二叉树

什么是完全二叉树?

完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^(h-1)  个节点。

从一个初学者看树

 二叉线索树

前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,二叉搜索树是一个有序树

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树

平衡二叉搜索树

如果向一棵预先排序的树输入数据,那么–连串insert操作将花费二次的时间,而链表实现的代价会非常巨大,因为此时的树将只由那些没有左儿子的结点组成。一种解决办法就是要有一个称为平衡(balance)的附加的结构条件:任何结点的深度均不得过深。

平衡条件是要求每个结点都必须有相同高度的左子树和右子树。如果空子树的高度定义为-1(通常就是这么定义),那么只有具有2*-1个结点的理想平衡树满足这个条件。因此,虽然这种平衡条件保证了树的深度小,但是它太严格,难以使用,需要放宽条件

左边和右边深度之差绝对值不超过一

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/129657.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!