首页 > 编程知识 正文

遍历二叉树例题,层次遍历二叉树算法

时间:2023-05-06 01:23:17 阅读:15160 作者:4880

问题是二叉树,当各级节点数达到最大值时,该二叉树就是完美的二叉树。 对于具有n个节点(深度为d )的二叉树,如果该节点对应于深度相同的完美二叉树层序遍历的前n个节点,则这种树是完整的二叉树。

请给我完整的二叉树后的遍历。 请给出这棵树的层序遍历结果。

输入要提供给第一行的正整数N(30,即树中的节点数。 第二行是n个小于或等于100的正整数,表示后面的遍历序列。 同一行中的所有数字都用空格分隔

输出将树的逐层扫描序列输出到一行。 所有数字都由一个空格分隔,不要在行前后有额外的空格。

输入示例891 71 2 34 10 15 55 18输出示例18 34 55 71 2 10 15 91主题分析结果显示,在完全二叉树的层序遍历中,以顺序存储的方式逐个存储每个节点的信息,即在节点数目范围内,一个节点的左孩子是当前节点所在位置 i 2 itimes2 i2的位置,右孩子在 i 2 + 1 itimes 2+1 i2+1处。(节点号从1开始) 【可以证明】

由此可见,如果以后将遍历的结果以一定的方法放在完全二叉树的该节点的顺序记忆中的对应位置,从开头到结尾逐个输出数组,就会得到层序遍历的结果。

代码# includeiostreamusingnamespacestd; 类型结构数据点* DP; 结构数据点{ DP left,right; Int数据; (; 结构数据点树[ 35 ]; int n; void init (()//初始化,构建完全二叉树的连接关系for ) ) intI=1; i=n; I ) if(I*2=n ) tree[i].left=tree[i*2]; //左子else tree[i].left=nullptr; if(I*21 )=n ) tree[i].right=tree[i*2 1]; //右边的子else tree[i].right=nullptr; } void traverse (结构数据点* Bt ) /之后遍历输入if(Bt-left )!=nullptr ) traverse(Bt-left ); if(Bt-right!=nullptr(traverse(Bt-right ); Sanf('%d ',BT-data ); (}int main ) ) {cin n; init (; traverse(tree[1]; for(intI=1; in; I ) )//逐个输出,结果为层序遍历结果cout tree[i].data '; }cout tree[n].dataendl; 返回0; }运行结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。