二叉树的层次遍历

本篇主要介绍二叉树的层次遍历算法。要点如下:

1、采用二叉链表存储结构。

2、手工构建一棵简单的静态二叉树。

3、基于stl的队列queue构建层次遍历算法。

一、测试用例中用到的二叉树

二、定义二叉链表的结点类型

struct node
{//树的结点结构。二叉链表表示法
	char data;
	node *lchild,*rchild;
};

三、构建静态二叉树

为了将精力集中到二叉树的层次遍历上,我们构建一棵静态的二叉树。

int main(  )
{
	node a,b,c,d,e;//定义5个结点作为二叉树的结点
	//为每个结点赋值
	a.data='a';a.lchild=a.rchild=0;
	b.data='b';b.lchild=b.rchild=0;
	c.data='c';c.lchild=c.rchild=0;
	d.data='d';d.lchild=d.rchild=0;
	e.data='e';e.lchild=e.rchild=0;
	//将各个结点连接成树
	a.lchild=&b;a.rchild=&c;
	c.lchild=&d;c.rchild=&e;
}

四、层次遍历二叉树

自然语言描述如下:

1、访问根root; root入队列q。

2、当队列q不空时,重复以下步骤3-6,否则跳转到步骤7.

3、取队头元素放入t,

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目描述: 以二叉链表存储结构创建如下图的二叉树,输入时将下图二叉树变为基于括号表示的字符串。创建二叉树和实现二叉树的三种遍历和层次遍历。最后求出叶子节点个数和二叉树深度。 回答: 这道题的意思是要求以二叉链表存储结构创建给定的二叉树,并将其转换为基于括号表示的字符串。然后实现二叉树的先序、中序、后序和层次遍历。最后求出该二叉树的叶子节点个数和深度。 具体实现方法可以参考以下步骤: 一、根据给定的二叉树图示,手动创建每个节点的二叉链表,并将其存储在对应的二叉树节点结构体中。 二、编写函数实现将二叉树转换为基于括号表示的字符串。具体实现方法可以参考以下步骤: 1. 对于空节点,返回空字符串。 2. 对于非空节点,将其值转换为字符串,并递归处理左右子树得到左括号、子树字符串、右括号,然后将它们拼接起来即可。 三、编写函数实现二叉树的先序、中序、后序遍历。具体实现方法可以参考以下步骤: 1. 对于空节点,直接返回。 2. 对于非空节点,先访问该节点,然后递归遍历其左子树和右子树。先序遍历是先访问根节点,中序遍历是中间访问,后序遍历是最后访问根节点。 四、编写函数实现二叉树层次遍历。具体实现方法可以参考以下步骤: 1. 将根节点压入队列。 2. 取出队首节点,并访问该节点。 3. 将该节点的左右子树(如果有的话)分别压入队列。 4. 重复步骤2和步骤3,直到队列为空。 五、编写函数实现求出二叉树的叶子节点个数和深度。具体实现方法可以参考以下步骤: 1. 对于空节点,返回0。 2. 对于叶子节点,返回1。 3. 对于非叶子节点,递归求出其左右子树的叶子节点个数和深度,然后将它们相加得到该节点的叶子节点个数和深度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值