二叉树

二叉树定义:

1、斜树
所有的结点都只有左子树(左斜树),或者只有右子树(右斜树)。

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

这里写图片描述

3、完全二叉树
对一棵具有n个结点的二叉树按层序排号,如果编号为i的结点与同样深度的满二叉树编号为i结点在二叉树中位置完全相同,就是完全二叉树。满二叉树必须是完全二叉树,反过来不一定成立。

这里写图片描述

4、二叉搜索树(BST)
它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

这里写图片描述

5、平衡二叉树(AVL)
它或者是一棵空树,或者是具有下列性质的二叉树:它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,同时,平衡二叉树必定是二叉搜索树,反之则不一定。
这里写图片描述

二叉树遍历:

这里写图片描述

1、前序遍历

基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子树。即 根—左—右

如上图遍历结果为:ABDHECFG

2、中序遍历

基本思想:先中序遍历左子树,然后再访问根结点,最后再中序遍历右子树。即 左—根—右

如上图遍历结果为:HDBEAFCG

3、后序遍历

基本思想:先后序遍历左子树,然后再后序遍历右子树,最后再访问根结点。即 左—右—根

如上图遍历结果为:HDEBFGCA

~~~ 可能有些新手,对于树的节点一多,就很难分清遍历到底应该怎么走。其实很简单,把树分解成各个子树就好办了。只要是非叶子节点,那就可以把它看做是根节点,然后也就是只有根左右 3 个节点,
例如上图,先分为左右子树
这里写图片描述这里写图片描述

ps:前序遍历,根—左—右,即从根节点A往左子树查找,只要左子树的左边有节点,就不要管左子树的右边,可得出 ABDH ,左边没有节点的时候,再在左子树右边从下向上查找,如果右边节点又有子节点,那么继续重复上面的步骤即可。如上图,H节点是叶子节点,左边已无节点,从下向上找右边,也就是E,得到 ABDHE,当然了,如果E下面有E1和E2左右两个节点,那么应该得到A B D H E E1 E2,相当于E是根节点,按照 根—左—右 就行了,左边查完,走右边就行了,右边得到ACFG,合并之后即ABDHECFG

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉树是一种常见的数据结构,由节点和边组成。每个节点最多有两个子节点,分别称为子节点和子节点。 创建二叉树的方法有多种。一种常用的方法是使用链式存储结构,即每个节点含有数据和指向子节点的指针。我们可以通过递归的方式创建二叉树。 首先,我们需要定义一个二叉树节点的结构,包括数据和子节点的指针。然后,按照二叉树的性质,递归地创建节点。具体步骤如下: 1. 创建一个根节点,将根节点的数据填入。 2. 如果输入数据为空,表示当前节点为叶子节点,返回。 3. 从输入数据中取出子节点的数据。 4. 创建子节点,并将其指针赋值给根节点的子节点指针。 5. 递归地调用创建二叉树的函数,将子节点作为参数。 6. 从输入数据中取出子节点的数据。 7. 创建子节点,并将其指针赋值给根节点的子节点指针。 8. 递归地调用创建二叉树的函数,将子节点作为参数。 当所有节点都创建完成后,我们就得到了一颗二叉树。可以根据需要对二叉树进行遍历、插入、删除等操作。 需要注意的是,在创建二叉树时,输入数据需要按照特定的规则进行排序,以满足二叉树的性质。例如,如果输入数据是升序排列的,则创建出的二叉树将是一个平衡叉搜索。 所以,创建二叉树的过程就是递归地将输入数据分配到每个节点,并按照二叉树的性质建立节点之间的连接关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值