爪哇2博客
爪哇2博客

爪哇中二叉树的螺旋/锯齿形水平顺序遍历

如果您想练习数据结构和算法程序,可以通过 数据结构和算法面试题.

这是Java二叉树教程的第六部分。

在这篇文章中,我们将看到有关Java中的螺旋/锯齿级顺序二叉树遍历的信息。

螺旋/锯齿级定单遍历:

下面树的螺旋/锯齿形水平遍历为:

解决步骤:

  1. 创建一个空堆栈s并将根压入它。
  2. 当堆栈不为空时,请执行以下操作
    1. 创建一个名为tempStack的空堆栈。
    2. 从堆栈弹出一个节点,然后根据directionFlag将其推送到tempStack
    3. 更改方向标记以更改遍历方向
    4. 设置stack = 临时堆栈

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
 
//打印螺旋/锯齿状的水平顺序
    上市 静态的 虚空 spiralOrZigzagLevelOrder(树节点 ) {
        如果(==空值) 返回;
        叠放<树节点> = 叠放<>();
        .();
 
        布尔值 方向旗=;
        (!.是空的())
        {
            叠放<树节点> 临时堆栈= 叠放<>();
 
            (!.是空的())
            {
                树节点 临时节点=.流行音乐();
                系统..打印(“%d”,临时节点.数据);
                如果(!方向旗)
                {
                    如果(临时节点.剩下!=空值)
                        临时堆栈.(临时节点.剩下);
                    如果(临时节点.!=空值)
                        临时堆栈.(临时节点.);
                }其他
                {
                    如果(临时节点.!=空值)
                        临时堆栈.(临时节点.);
                    如果(临时节点.剩下!=空值)
                        临时堆栈.(临时节点.剩下);
                }
            }
            //用于改变方向
            方向旗=!方向旗;
 
            =临时堆栈;
        }
 
    }
 

例:
假设您的二叉树是:

因此,螺旋/锯齿级定单遍历将按以下方式工作:

让我们创建用于螺旋/锯齿级遍历的Java程序:

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
组织.Arpit.爪哇2blog.二叉树;
 
进口 爪哇.实用程序.叠放;
上市 BinaryTreeSpiralOrder {
 
    上市 静态的 树节点
    {
        整型 数据;
        树节点 剩下;
        树节点 ;
        树节点(整型 数据)
        {
            这个.数据=数据;
        }
    }
 
    //打印螺旋/锯齿状的水平顺序
    上市 静态的 虚空 spiralOrZigzagLevelOrder(树节点 ) {
        如果(==空值) 返回;
        叠放<树节点> = 叠放<>();
        .();
 
        布尔值 方向旗=;
        (!.是空的())
        {
            叠放<树节点> 临时堆栈= 叠放<>();
 
            (!.是空的())
            {
                树节点 临时节点=.流行音乐();
                系统..打印(“%d”,临时节点.数据);
                如果(!方向旗)
                {
                    如果(临时节点.剩下!=空值)
                        临时堆栈.(临时节点.剩下);
                    如果(临时节点.!=空值)
                        临时堆栈.(临时节点.);
                }其他
                {
                    如果(临时节点.!=空值)
                        临时堆栈.(临时节点.);
                    如果(临时节点.剩下!=空值)
                        临时堆栈.(临时节点.剩下);
                }
            }
            //用于改变方向
            方向旗=!方向旗;
 
            =临时堆栈;
        }
 
    }
    上市 静态的 虚空 主要([] args)
    {
        BinaryTreeSpiralOrder = BinaryTreeSpiralOrder();
        //创建一个二叉树
        树节点 根节点=createBinaryTree();
        系统..打印(“二叉树的螺旋/锯齿形遍历:”);
        spiralOrZigzagLevelOrder(根节点);
    }
 
    上市 静态的 树节点 createBinaryTree()
    {
 
        树节点 根节点 = 树节点(40);
        树节点 node20= 树节点(20);
        树节点 node10= 树节点(10);
        树节点 node30= 树节点(30);
        树节点 node60= 树节点(60);
        树节点 node50= 树节点(50);
        树节点 node70= 树节点(70);
        树节点 node5= 树节点(5);
        树节点 node55= 树节点(55);
 
        根节点.剩下=node20;
        根节点.=node60;
 
        node20.剩下=node10;
        node20.=node30;
 
        node60.剩下=node50;
        node60.=node70;
        node10.剩下=node5;
        node50.=node55;
 
        返回 根节点;
    }
}
 

运行上面的程序,您将获得以下输出:

1
2
3
4
 
螺旋/之字形 遍历 二元 :
40 60 20 10 30 50 70 55 5
 

爪哇 Binary树教程:

请通过 爪哇面试程序 有关更多此类程序。

导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


成为朋友

©2020 爪哇2博客