说不完的树——一些题目

关于二叉树的经典题型,有很多,比如构造哈夫曼,求权值,树和森林的转化,二叉树的遍历,最小生成树等等。今天想跟大家分享一下二叉树遍历方面的问题和最小生成树。

首先说一下二叉树的遍历吧,有大家耳熟能详的三种遍历,即前序遍历,中序遍历,后序遍历等等,这里的序主要指的是根节点被访问的顺序。

先序遍历,即先访问根节点,在访问左子树,最后访问右子树。

代码实现如下

Type preorder(type *T)

{

visit(T);

preorder(T->lchild);

preorder(T->rchild);

}

先序遍历,即先访问根节点,在访问左子树,最后访问右子树。

代码实现如下

void  preorder(type *T)

{

visit(T);

preorder(T->lchild);

preorder(T->rchild);

}

中序遍历,即先访问左子树,在访问根节点,最后访问右子树。

代码实现如下

void preorder(type *T)

{

preorder(T->lchild);

visit(T);

preorder(T->rchild);

}

后序遍历也差不多,值得注意的是,在题目要求你写先序中序后序遍历的时候,可以先将对应的代码写出来,然后跟着代码一步步实现。

一般比较常考的题就是给你三个序列中间的两个,然后让你求下一个,这种题该怎么做呢,话不多说,来看题。

已知一棵二叉树的前序遍历序列和中序遍历序列分别为ABCDEFGHI 和BCAEDGHFI,如何求该二叉树的后序遍历呢。

首先我们得先构造出这棵树,如何构造呢,我们得一步步来,首先可以判断A是根节点,BC在A的左子树上,而其他的在A的右子树上,然后我们来确定BC的位置,B肯定为A的左子树,而C因为在B的后面,所以只能是B的右子树。这时候问题就简化为求EDGHFI这棵树的顺序了,我们继续如法炮制,如图:

慢慢分解,从上至下,逐步确认。此时我们可以清楚的得出该二叉树的后序遍历cbehgifda.

还有一类题目就是关于最小生成树的问题了,这类问题一般有两种解决方法,一种修改边,一种从点出发,进行连接。分别为普利姆和克鲁斯卡尔算法;

普利姆算法的核心是:从一个定点构建最小生成树,每次将代价最小的定点纳入最小生成树,直到所有的节点都被纳入这棵树里。但普利姆算法不能用来算带有负权值的边。

克鲁斯卡尔算法的核心是:每次选择一条权值最小的边,(原本已经联通的就不考虑,直到所有的节点都被纳入这颗树中)比如:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值