diff --git a/scala-leetcode/README.md b/scala-leetcode/README.md index d5f5181f94e19a162e4fb7f6573a40bd1b3c033d..9276a7f4d0c3342cb087e00cd03b88f1ecc128a5 100644 --- a/scala-leetcode/README.md +++ b/scala-leetcode/README.md @@ -40,6 +40,7 @@ Leetcode Scala 实现 * [检查平衡性](./src/main/scala/io/github/dreamylost/Leetcode_Interview_0404.scala) * [叶子相似的树](./src/main/scala/io/github/dreamylost/Leetcode_872.scala) * [递增顺序查找树](./src/main/scala/io/github/dreamylost/Leetcode_897.scala) +* [单值二叉树](./src/main/scala/io/github/dreamylost/Leetcode_965.scala) ## 链表 diff --git a/scala-leetcode/src/main/scala/io/github/dreamylost/BTT.scala b/scala-leetcode/src/main/scala/io/github/dreamylost/BTT.scala index 521a992b5b173dc77ad46d37cda0e06620efa443..d1d81d2088fa983157bf14ac3ef944195f3338bb 100644 --- a/scala-leetcode/src/main/scala/io/github/dreamylost/BTT.scala +++ b/scala-leetcode/src/main/scala/io/github/dreamylost/BTT.scala @@ -39,34 +39,36 @@ object BTT extends App { } //前,144. Binary Tree Preorder Traversal (Medium) + @unchecked def preorderTraversal(root: TreeNode): Seq[Int] = { var ret = Seq[Int]() - var stack = Stack[TreeNode]() - stack = stack.push(root) + var stack = List[TreeNode]() + stack = root :: stack while (stack.nonEmpty) { - val (node, s) = stack.pop2 + val (node, s) = stack.head -> stack.tail stack = s if (node != null) { ret = ret ++ Seq(node.value) - stack = stack.push(node.right) // 先右后左,保证左子树先遍历 - stack = stack.push(node.left) + stack = node.right :: stack // 先右后左,保证左子树先遍历 + stack = node.left :: stack } } ret } //中, 94. Binary Tree Inorder Traversal (Medium) + @unchecked def inorderTraversal(root: TreeNode): Seq[Int] = { var ret = Seq[Int]() - var stack = Stack[TreeNode]() + var stack = List[TreeNode]() if (root == null) return ret var cur = root while (cur != null || stack.nonEmpty) { while (cur != null) { - stack = stack.push(cur) + stack = cur :: stack cur = cur.left } - val (node, s) = stack.pop2 + val (node, s) = stack.head -> stack.tail stack = s ret = ret ++ Seq(node.value) cur = node.right @@ -79,17 +81,18 @@ object BTT extends App { * 前序遍历为 root -> left -> right,后序遍历为 left -> right -> root。可以修改前序遍历成为 root -> right -> left,那么这个顺序就和后序遍历正好相反。 */ //后,145. Binary Tree Postorder Traversal (Medium) + @unchecked def postorderTraversal(root: TreeNode): Seq[Int] = { var ret = Seq[Int]() - var stack = Stack[TreeNode]() - stack = stack.push(root) + var stack = List[TreeNode]() + stack = root :: stack while (stack.nonEmpty) { - val (node, s) = stack.pop2 + val (node, s) = stack.head -> stack.tail stack = s if (node != null) { ret = ret ++ Seq(node.value) - stack = stack.push(node.left) // 先右后左,保证左子树先遍历 - stack = stack.push(node.right) + stack = node.left :: stack // 先右后左,保证左子树先遍历 + stack = node.right :: stack } } ret.reverse diff --git a/scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_501.scala b/scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_501.scala index f595bd4b9bb8d3c0505e98ac6ac61a76eb2b52f8..b517929e257b144ace42237e51155344b69b6ca5 100644 --- a/scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_501.scala +++ b/scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_501.scala @@ -55,7 +55,7 @@ object Leetcode_501 extends App { var ret = Array[Int]() def inOrder(root: TreeNode): Unit = { - if (root == null) return; + if (root == null) return inOrder(root.left) if (preNode != null && preNode.value == root.value) { curCount += 1 diff --git a/scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_965.scala b/scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_965.scala new file mode 100644 index 0000000000000000000000000000000000000000..ab1ea567f2dca35534d3a40a51974ccee1ac777b --- /dev/null +++ b/scala-leetcode/src/main/scala/io/github/dreamylost/Leetcode_965.scala @@ -0,0 +1,45 @@ +package io.github.dreamylost + +/** + * 965. 单值二叉树 + * + * 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 + * + * 只有给定的树是单值二叉树时,才返回 true;否则返回 false。 + * + * @author 梦境迷离 dreamylost + * @since 2020-06-21 + * @version v1.0 + */ +object Leetcode_965 extends App { + + val ret = isUnivalTree(TreeNodeData.treeData3_5()) + println(ret) + + /** + * 记录当前节点的前缀即可 + * 540 ms,100.00% + * 50.8 MB,100.00% + * + * @param root + * @return + */ + def isUnivalTree(root: TreeNode): Boolean = { + var ret = true + var preNode: TreeNode = null + + def helper(r: TreeNode): Unit = { + if (r == null) return + helper(r.left) + if (preNode != null && preNode.value != r.value) { + ret = false + } + preNode = r + helper(r.right) + } + + helper(root) + ret + } + +}