首页 > 编程知识 正文

二叉树层次遍历递归算法,二叉树层序遍历递归

时间:2023-05-06 14:13:51 阅读:15151 作者:1689

在学习树的过程中,我发现他们有共同的特征。 无论是创建还是扫描,都需要从父代到子代、从右到子代的顺序

层序遍历时,顺序为A-B-C-D-E-F-G,先访问的节点,其他子女也先访问。 按层序创建二叉树时,先创建的节点,其子女也先创建,符合先进先出原则,可以在队列中实现。 所以他们的共同点是可以在队列中实现。

先从比较简单的遍历开始吧。

1 .层序遍历思路:刚才分析的时候,我们发现了可用的队列。 第一步,如果根节点不空闲,首先放入根节点,判断他左右的孩子是否空闲。 如果没有空的话就打印根节点,让他的孩子进来。

第二步,取出队列的第一个节点并打印,判断是否有左右孩子,如果有,让孩子进入团队。

重复步骤2,直到队列为空。

代码:

staticvoidlevelorder(nodet ) {链接列表q=新链接列表}; 声明//队列Q.ADD(T )//根节点入队后,应该确定根节点是否为空,但没有写为懒惰的while(q.isEmpty () ) { Node p=q.pollFirst //每次回头的节点system.out.print(p.data ' ); if(p.lchild!=null ()//如果左子项左子项进入团队q.add(p.lchild ); (if ) p.Rchild!=null(//如果右边的孩子右边的孩子进入了团队q.add(p.rchild ); }}2.按层序做二叉树老实说我在学习中没有遇到过按层序做的东西,但是打印出来的时候有按层序输入的输入,我就想层序是怎么做二叉树的。 其实和层序遍历思想一样,先做的他的孩子也先做了。

//层序二叉树staticnodecerate _ level tree (节点) (linkedlistnodeq=newlinkedlistnode ) ); //果然还是做队列String ch; 节点p; sanner scanner=new scanner (system.in; ch=scanner.nextLine (; //从控制台中取出并输入第一个节点if (! ch.equals('null ' ) ) /如果不为空,则将其放入团队中(node=new Node ) ); //节点node.data=ch生成ch//将输入的数据保存到Q.ADD(Node ) } while (! q.isEmpty () ) { ch=scanner.nextLine; //此外,还可以从控制台获取元素p=q.pollFirst (; //每回头节点if(ch.equals('null ) ) /如果不为空则证明有左子女p.lchild=null; } else{ p.lchild=new Node (; //做左边的孩子入队到p.lchild.data=ch; q.add(p.lchild ); (} ch=scanner.nextLine (; //另一个要素if(ch.equals('null ) ) /如果不是空则证明有右边的孩子p.rchild=null; } else{ p.rchild=new Node (; //做右边的孩子加入p.rchild.data=ch; q.add(p.rchild ); } }返回节点; }代码显示,while循环中除了根节点之外,还存在其他while循环,根据从控制台输入的字符或字符串首先确定根节点有无左右儿女,如果有,则创建赋值并入队,否则清空左儿女或右儿女

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