隐藏页面特效

树的层次遍历

说到树的层次遍历,就应该提到广度优先搜索算法------广度优先搜索算法(Breadth-First-Search),又译作宽度优先搜索,或横向优先搜索,简称BFS,是一种图形搜索算法。

         可以说树层次遍历是广度优先遍历的一种直接应用吧,比较广度优先搜索是图形的一种搜索算法,图形是一种比较大的概念,但这个和深度优先齐名的算法,在树的层次遍历引用中,并没有那么复杂,或许是因为用在树的遍历,而非图吧。

 

       树的层次遍历,故名思议,在一棵树中,把节点从左往右,一层一层的,从上往下,遍历输出,这里要用到一种很重要的数据结构,队列。

          步骤如下:

       1.首先将根节点放入队列中。 
       2.当队列为非空时,循环执行步骤3到步骤5,否则执行6; 
       3.出队列取得一个结点,访问该结点; 
       4.若该结点的左子树为非空,则将该结点的左子树入队列; 
       5.若该结点的右子树为非空,则将该结点的右子树入队列; 
       6.结束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<code-pre class="code-pre" id="pre-Fjaefa"><code-line class="line-numbers-rows"></code-line>import java.util.ArrayDeque;
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>class TreeNode {
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>   private TreeNode left = null;
<code-line class="line-numbers-rows"></code-line>   private TreeNode right = null;
<code-line class="line-numbers-rows"></code-line>   Integer val;
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>   public TreeNode(Integer val) {
<code-line class="line-numbers-rows"></code-line>       this.val = val;
<code-line class="line-numbers-rows"></code-line>   }
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>   public void setLeft(TreeNode node) {
<code-line class="line-numbers-rows"></code-line>       this.left = node;
<code-line class="line-numbers-rows"></code-line>   }
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>   public void setRight(TreeNode node) {
<code-line class="line-numbers-rows"></code-line>       this.right = node;
<code-line class="line-numbers-rows"></code-line>   }
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>   public static void BFSOrder(TreeNode node) {
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>       if (node == null) {
<code-line class="line-numbers-rows"></code-line>           return;
<code-line class="line-numbers-rows"></code-line>       }
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>       ArrayDeque<TreeNode> queue = new ArrayDeque<>();
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>       queue.add(node);
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>       while (!queue.isEmpty()) {
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>           // 一定要放判定之前,否则会出大事
<code-line class="line-numbers-rows"></code-line>           node = queue.poll();
<code-line class="line-numbers-rows"></code-line>           System.out.print(node.val + " ");
<code-line class="line-numbers-rows"></code-line>           if (node.left != null) {
<code-line class="line-numbers-rows"></code-line>               queue.add(node.left);
<code-line class="line-numbers-rows"></code-line>           }
<code-line class="line-numbers-rows"></code-line>           if (node.right != null) {
<code-line class="line-numbers-rows"></code-line>               queue.add(node.right);
<code-line class="line-numbers-rows"></code-line>           }
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>           // System.out.println(queue.poll().val + " ");
<code-line class="line-numbers-rows"></code-line>       }
<code-line class="line-numbers-rows"></code-line>   }
<code-line class="line-numbers-rows"></code-line>}
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>public class Solution {
<code-line class="line-numbers-rows"></code-line>   public static void main(String[] args) {
<code-line class="line-numbers-rows"></code-line>       TreeNode n1 = new TreeNode(1);
<code-line class="line-numbers-rows"></code-line>       TreeNode n2 = new TreeNode(2);
<code-line class="line-numbers-rows"></code-line>       TreeNode n3 = new TreeNode(3);
<code-line class="line-numbers-rows"></code-line>       TreeNode n4 = new TreeNode(4);
<code-line class="line-numbers-rows"></code-line>       TreeNode n5 = new TreeNode(5);
<code-line class="line-numbers-rows"></code-line>       TreeNode n6 = new TreeNode(6);
<code-line class="line-numbers-rows"></code-line>       TreeNode n7 = new TreeNode(7);
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>       n1.setLeft(n2);
<code-line class="line-numbers-rows"></code-line>       n1.setRight(n3);
<code-line class="line-numbers-rows"></code-line>       n2.setLeft(n4);
<code-line class="line-numbers-rows"></code-line>       n2.setRight(n5);
<code-line class="line-numbers-rows"></code-line>       n3.setLeft(n6);
<code-line class="line-numbers-rows"></code-line>       n4.setLeft(n7);
<code-line class="line-numbers-rows"></code-line>
<code-line class="line-numbers-rows"></code-line>       TreeNode.BFSOrder(n1);
<code-line class="line-numbers-rows"></code-line>   }
<code-line class="line-numbers-rows"></code-line>}
<code-line class="line-numbers-rows"></code-line>
</code-pre>

  


__EOF__

本文作者FigSprite
本文链接https://www.cnblogs.com/figsprite/p/10666859.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FigSprite  阅读(7864)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示