爪哇2博客
爪哇2博客

爪哇中的二叉树PostOrder遍历

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

这是竞彩篮球分析二叉树教程的第3部分。


在这篇文章中,我们将了解竞彩篮球分析中的PostOrder二进制树遍历。

后订单遍历

在PostOrder遍历中,在遍历子树之后处理每个节点。简单地说,先访问左子树,右子树然后访问节点。
PostOrder遍历的步骤是:
  • Traverse the 剩下 subtree in PostOrder.
  • Traverse the 对 subtree in PostOrder.
  • Visit 节点。

有两种实现方式

  • 递归的
  • 迭代式

递归解决方案

递归解决方案非常简单,下图将使您更好地理解递归。

递归代码将是:

1
2
3
4
5
6
7
8
9
10
11
 
//递归解决方案
上市 虚空 后订单(树节点 ) {
如果( !=   空值) {
后订单(.剩下);
后订单(.);
//通过打印节点数据来访问节点  
系统..打印(“%d”,.数据);
}
}
 

迭代解决方案:

迭代解决方案的步骤:

  1. Create an empty stack s and set 当前Node =root.
  2. 当前Node is not NULL Do following
    1. Push 当前Node 's 对 child and then 当前Node to stack s
    2. 当前Node=currentNode.left
  3. Pop a node from stack s and set it to 当前Node
    1. If the 流行音乐ped node has a 对 child and the 对 child is at top of stack, then remove the 对 child from stack, 推 the 当前Node back and set 当前Node as 当前Node 's 对 child.
    2. Else 打印 当前Node's 数据 and set 当前Node as NULL.
  4. 堆栈不为空时,请重复步骤2和3。

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
 
//迭代解决方案
上市 虚空 postorderIter( 树节点 ) {
如果( == 空值 ) 返回;
 
叠放<树节点> s = 叠放<树节点>( );
树节点 当前 = ;
 
( 真正 ) {
 
如果( 当前 != 空值 ) {
如果( 当前. != 空值 )
s.( 当前. );
s.( 当前 );
当前 = 当前.剩下;
继续;
}
 
如果( s.是空的( ) )
返回;
当前 = s.流行音乐( );
 
如果( 当前. != 空值 && ! s.是空的( ) && 当前. == s.窥视( ) ) {
s.流行音乐( );
s.( 当前 );
当前 = 当前.;
} 其他 {
系统..打印( 当前.数据 + );
当前 = 空值;
}
}
}
 

让我们创建用于postOrder遍历的竞彩篮球分析程序:

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
91
92
93
94
95
96
97
98
99
100
101
 
组织.Arpit.爪哇2blog.二叉树;
 
进口 爪哇.实用程序.叠放;
 
上市 BinaryTreePostOrder {
 
 
上市 静态的 树节点
{
整型 数据;
树节点 剩下;
树节点 ;
树节点(整型 数据)
{
这个.数据=数据;
}
}
 
//递归解决方案
上市 虚空 后订单(树节点 ) {
如果( !=   空值) {
后订单(.剩下);
后订单(.);
//通过打印节点数据来访问节点  
系统..打印(“%d”,.数据);
}
}
 
//迭代解决方案
上市 虚空 postorderIter( 树节点 ) {
如果( == 空值 ) 返回;
 
叠放<树节点> s = 叠放<树节点>( );
树节点 当前 = ;
 
( 真正 ) {
 
如果( 当前 != 空值 ) {
如果( 当前. != 空值 )
s.( 当前. );
s.( 当前 );
当前 = 当前.剩下;
继续;
}
 
如果( s.是空的( ) )
返回;
当前 = s.流行音乐( );
 
如果( 当前. != 空值 && ! s.是空的( ) && 当前. == s.窥视( ) ) {
s.流行音乐( );
s.( 当前 );
当前 = 当前.;
} 其他 {
系统..打印( 当前.数据 + );
当前 = 空值;
}
}
}
 
上市 静态的 虚空 主要([] args)
{
BinaryTreePostOrder = BinaryTreePostOrder();
//创建一个二叉树
树节点 根节点=createBinaryTree();
系统..打印(“使用递归解决方案:”);
 
.后订单(根节点);
 
系统..打印();
系统..打印(“ -------------------------”);
系统..打印(“使用迭代解决方案:”);
 
.postorderIter(根节点);
}
 
上市 静态的 树节点 createBinaryTree()
{
 
树节点 根节点 = 树节点(40);
树节点 node20= 树节点(20);
树节点 node10= 树节点(10);
树节点 node30= 树节点(30);
树节点 node60= 树节点(60);
树节点 node50= 树节点(50);
树节点 node70= 树节点(70);
 
根节点.剩下=node20;
根节点.=node60;
 
node20.剩下=node10;
node20.=node30;
 
node60.剩下=node50;
node60.=node70;
 
返回 根节点;
}
}
 

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

使用递归解决方案:
10 30 20 50 70 60 40
————————-
使用迭代解决方案:
10 30 20 50 70 60 40

爪哇二叉树教程

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

导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

  • 11月29日

    超过100个竞彩篮球分析编码面试问题

    我一直在发布有关各种主题的数据结构和编码面试问题,例如数组,队列,堆栈,二叉树,LinkedList,字符串,数字,ArrayList等。因此,我将合并一个竞彩篮球分析编码面试问题列表以创建索引发布。每当我添加新的竞彩篮球分析 [时,我都会继续添加指向此帖子的链接[…]

  • 4月18日

    到达最后一个索引的最小跳转数

    如果您想练习数据结构和算法程序,可以阅读100多种数据结构和算法程序。在这篇文章中,我们将看到如何找到到达上一个索引的最小跳转数。问题给定一个正整数数组A(可能为零),每个索引表示[…]

  • 3月28日

    对0、1和2的数组进行排序

    如果您想练习数据结构和算法程序,可以阅读100多种数据结构和算法程序。在这篇文章中,我们将看到如何对0、1和2s的数组进行排序。我们已经看到了有关对数组中的0s和1s进行排序的文章。问题给定一个包含零的数组,[…]

  • 3月04

    通过跳转检查是否有可能到达给定数组的末尾

    如果您想练习数据结构和算法程序,可以阅读100多种数据结构和算法程序。问题给定一个具有正整数作为元素的数组,该数组指示可以从数组中任何位置进行跳转的最大长度。检查是否可以[…]

  • 2月17日

    检查数组元素是否连续

    如果您想练习数据结构和算法程序,可以阅读100多种数据结构和算法程序。在这篇文章中,我们将看到如何检查数组元素是否连续。问题给定一个数组,我们需要检查数组是否包含连续的元素。例如:输入:array [] = {5,3,4,[…]

  • 2月04日

    O(Sqrt(height))中的K元树的LCA

    如果您想练习数据结构和算法程序,可以阅读100多种数据结构和算法程序。在这篇文章中,我们将了解如何在O(Sqrt(height))中找到K元树的最低公共祖先。我们已经看到了如何在O(n)复杂度中找到n元树的LCA。给定[…]

Comments

发表评论

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

订阅我们的新闻

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


成为朋友

©2020 爪哇2博客