Skip to content

Commit acc662b

Browse files
committed
添加 Swift 代码实现
1 parent 7572d7c commit acc662b

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

animation-simulation/二叉树/二叉树的后续遍历 (迭代).md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,39 @@ class Solution {
7171
}
7272
```
7373

74+
Swift Code:
75+
76+
```swift
77+
class Solution {
78+
func postorderTraversal(_ root: TreeNode?) -> [Int] {
79+
var list:[Int] = []
80+
var stack:[TreeNode] = []
81+
var cur = root, preNode: TreeNode?
82+
while !stack.isEmpty || cur != nil {
83+
//和之前写的中序一致
84+
while cur != nil {
85+
stack.append(cur!)
86+
cur = cur!.left
87+
}
88+
//1.出栈,可以想一下,这一步的原因。
89+
cur = stack.popLast()
90+
//2.if 里的判断语句有什么含义?
91+
if cur!.right === nil || cur!.right === preNode {
92+
list.append(cur!.val)
93+
//更新下 preNode,也就是定位住上一个访问节点。
94+
preNode = cur
95+
cur = nil
96+
} else {
97+
//3.再次压入栈,和上面那条 1 的关系?
98+
stack.append(cur!)
99+
cur = cur!.right
100+
}
101+
}
102+
return list
103+
}
104+
}
105+
```
106+
74107
当然也可以修改下代码逻辑将 `cur = stack.pop()` 改成 `cur = stack.peek()`,下面再修改一两行代码也可以实现,这里这样写是方便动画模拟,大家可以随意发挥。
75108

76109
时间复杂度 O(n), 空间复杂度O(n)

0 commit comments

Comments
 (0)