Skip to content

Commit 1ef962f

Browse files
Merge pull request youngyangyang04#1348 from wzqwtt/tree01
添加(二叉树理论基础、二叉树的递归遍历、二叉树的迭代遍历)Scala版本
2 parents 0bb5277 + 4aad0f9 commit 1ef962f

File tree

3 files changed

+124
-1
lines changed

3 files changed

+124
-1
lines changed

problems/二叉树理论基础.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,13 @@ class TreeNode<T> {
258258
}
259259
}
260260
```
261-
261+
Scala:
262+
```scala
263+
class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) {
264+
var value: Int = _value
265+
var left: TreeNode = _left
266+
var right: TreeNode = _right
267+
}
268+
```
262269
-----------------------
263270
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

problems/二叉树的迭代遍历.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,71 @@ func inorderTraversal(_ root: TreeNode?) -> [Int] {
568568
return result
569569
}
570570
```
571+
Scala:
572+
```scala
573+
// 前序遍历(迭代法)
574+
object Solution {
575+
import scala.collection.mutable
576+
def preorderTraversal(root: TreeNode): List[Int] = {
577+
val res = mutable.ListBuffer[Int]()
578+
if (root == null) return res.toList
579+
// 声明一个栈,泛型为TreeNode
580+
val stack = mutable.Stack[TreeNode]()
581+
stack.push(root) // 先把根节点压入栈
582+
while (!stack.isEmpty) {
583+
var curNode = stack.pop()
584+
res.append(curNode.value) // 先把这个值压入栈
585+
// 如果当前节点的左右节点不为空,则入栈,先放右节点,再放左节点
586+
if (curNode.right != null) stack.push(curNode.right)
587+
if (curNode.left != null) stack.push(curNode.left)
588+
}
589+
res.toList
590+
}
591+
}
571592

593+
// 中序遍历(迭代法)
594+
object Solution {
595+
import scala.collection.mutable
596+
def inorderTraversal(root: TreeNode): List[Int] = {
597+
val res = mutable.ArrayBuffer[Int]()
598+
if (root == null) return res.toList
599+
val stack = mutable.Stack[TreeNode]()
600+
var curNode = root
601+
// 将左节点都入栈,当遍历到最左(到空)的时候,再弹出栈顶元素,加入res
602+
// 再把栈顶元素的右节点加进来,继续下一轮遍历
603+
while (curNode != null || !stack.isEmpty) {
604+
if (curNode != null) {
605+
stack.push(curNode)
606+
curNode = curNode.left
607+
} else {
608+
curNode = stack.pop()
609+
res.append(curNode.value)
610+
curNode = curNode.right
611+
}
612+
}
613+
res.toList
614+
}
615+
}
616+
617+
// 后序遍历(迭代法)
618+
object Solution {
619+
import scala.collection.mutable
620+
def postorderTraversal(root: TreeNode): List[Int] = {
621+
val res = mutable.ListBuffer[Int]()
622+
if (root == null) return res.toList
623+
val stack = mutable.Stack[TreeNode]()
624+
stack.push(root)
625+
while (!stack.isEmpty) {
626+
val curNode = stack.pop()
627+
res.append(curNode.value)
628+
// 这次左节点先入栈,右节点再入栈
629+
if(curNode.left != null) stack.push(curNode.left)
630+
if(curNode.right != null) stack.push(curNode.right)
631+
}
632+
// 最后需要翻转List
633+
res.reverse.toList
634+
}
635+
}
636+
```
572637
-----------------------
573638
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

problems/二叉树的递归遍历.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,5 +470,56 @@ func postorder(_ root: TreeNode?, res: inout [Int]) {
470470
res.append(root!.val)
471471
}
472472
```
473+
Scala: 前序遍历:(144.二叉树的前序遍历)
474+
```scala
475+
object Solution {
476+
import scala.collection.mutable.ListBuffer
477+
def preorderTraversal(root: TreeNode): List[Int] = {
478+
val res = ListBuffer[Int]()
479+
def traversal(curNode: TreeNode): Unit = {
480+
if(curNode == null) return
481+
res.append(curNode.value)
482+
traversal(curNode.left)
483+
traversal(curNode.right)
484+
}
485+
traversal(root)
486+
res.toList
487+
}
488+
}
489+
```
490+
中序遍历:(94. 二叉树的中序遍历)
491+
```scala
492+
object Solution {
493+
import scala.collection.mutable.ListBuffer
494+
def inorderTraversal(root: TreeNode): List[Int] = {
495+
val res = ListBuffer[Int]()
496+
def traversal(curNode: TreeNode): Unit = {
497+
if(curNode == null) return
498+
traversal(curNode.left)
499+
res.append(curNode.value)
500+
traversal(curNode.right)
501+
}
502+
traversal(root)
503+
res.toList
504+
}
505+
}
506+
```
507+
后序遍历:(145. 二叉树的后序遍历)
508+
```scala
509+
object Solution {
510+
import scala.collection.mutable.ListBuffer
511+
def postorderTraversal(root: TreeNode): List[Int] = {
512+
val res = ListBuffer[Int]()
513+
def traversal(curNode: TreeNode): Unit = {
514+
if (curNode == null) return
515+
traversal(curNode.left)
516+
traversal(curNode.right)
517+
res.append(curNode.value)
518+
}
519+
traversal(root)
520+
res.toList
521+
}
522+
}
523+
```
473524
-----------------------
474525
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
 (0)