Swift syntax: 102. Binary Tree Level Order Traversal
$begingroup$
This is my solution to 102. Binary Tree Level Order Traversal in Swift
102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
- For example:
Given binary tree [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
Here is my code:
func levelOrder(_ root: TreeNode?) -> [[Int]] {
guard let root = root else{
return
}
let nodes = recursiveVisit(root)
let capacity = nodes.reduce([Int]()) {
if $0.contains($1.0) == false {
return $0 + [$1.0]
}
return $0
}.count
return nodes.reduce([[Int]](repeating: , count: capacity), {
var tmp = $0
tmp[$1.0].append($1.1)
return tmp
})
}
func recursiveVisit(_ node: TreeNode?) -> [(Int, Int)]{
// [(Int, Int)]
// depth, node.val
guard let node = node else{
return
}
var nodes = [(Int, Int)]()
nodes.append((0, node.val))
let lhs = recursiveVisit(node.left).map {
return ($0.0 + 1, $0.1)
}
let rhs = recursiveVisit(node.right).map {
return ($0.0 + 1, $0.1)
}
nodes.append(contentsOf: lhs)
nodes.append(contentsOf: rhs)
return nodes
}
The solution is very intuitive, collect the nodes' value and depth.Then reduce to the answer.
Not well designed as the Java Solution
My question is mainly on the Swift syntax.
Get the info, first reduce to the count , then reduce to the collection.
Is there any other way to do it more lean? Combine the two reduce to one.
programming-challenge swift
$endgroup$
add a comment |
$begingroup$
This is my solution to 102. Binary Tree Level Order Traversal in Swift
102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
- For example:
Given binary tree [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
Here is my code:
func levelOrder(_ root: TreeNode?) -> [[Int]] {
guard let root = root else{
return
}
let nodes = recursiveVisit(root)
let capacity = nodes.reduce([Int]()) {
if $0.contains($1.0) == false {
return $0 + [$1.0]
}
return $0
}.count
return nodes.reduce([[Int]](repeating: , count: capacity), {
var tmp = $0
tmp[$1.0].append($1.1)
return tmp
})
}
func recursiveVisit(_ node: TreeNode?) -> [(Int, Int)]{
// [(Int, Int)]
// depth, node.val
guard let node = node else{
return
}
var nodes = [(Int, Int)]()
nodes.append((0, node.val))
let lhs = recursiveVisit(node.left).map {
return ($0.0 + 1, $0.1)
}
let rhs = recursiveVisit(node.right).map {
return ($0.0 + 1, $0.1)
}
nodes.append(contentsOf: lhs)
nodes.append(contentsOf: rhs)
return nodes
}
The solution is very intuitive, collect the nodes' value and depth.Then reduce to the answer.
Not well designed as the Java Solution
My question is mainly on the Swift syntax.
Get the info, first reduce to the count , then reduce to the collection.
Is there any other way to do it more lean? Combine the two reduce to one.
programming-challenge swift
$endgroup$
add a comment |
$begingroup$
This is my solution to 102. Binary Tree Level Order Traversal in Swift
102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
- For example:
Given binary tree [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
Here is my code:
func levelOrder(_ root: TreeNode?) -> [[Int]] {
guard let root = root else{
return
}
let nodes = recursiveVisit(root)
let capacity = nodes.reduce([Int]()) {
if $0.contains($1.0) == false {
return $0 + [$1.0]
}
return $0
}.count
return nodes.reduce([[Int]](repeating: , count: capacity), {
var tmp = $0
tmp[$1.0].append($1.1)
return tmp
})
}
func recursiveVisit(_ node: TreeNode?) -> [(Int, Int)]{
// [(Int, Int)]
// depth, node.val
guard let node = node else{
return
}
var nodes = [(Int, Int)]()
nodes.append((0, node.val))
let lhs = recursiveVisit(node.left).map {
return ($0.0 + 1, $0.1)
}
let rhs = recursiveVisit(node.right).map {
return ($0.0 + 1, $0.1)
}
nodes.append(contentsOf: lhs)
nodes.append(contentsOf: rhs)
return nodes
}
The solution is very intuitive, collect the nodes' value and depth.Then reduce to the answer.
Not well designed as the Java Solution
My question is mainly on the Swift syntax.
Get the info, first reduce to the count , then reduce to the collection.
Is there any other way to do it more lean? Combine the two reduce to one.
programming-challenge swift
$endgroup$
This is my solution to 102. Binary Tree Level Order Traversal in Swift
102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
- For example:
Given binary tree [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
Here is my code:
func levelOrder(_ root: TreeNode?) -> [[Int]] {
guard let root = root else{
return
}
let nodes = recursiveVisit(root)
let capacity = nodes.reduce([Int]()) {
if $0.contains($1.0) == false {
return $0 + [$1.0]
}
return $0
}.count
return nodes.reduce([[Int]](repeating: , count: capacity), {
var tmp = $0
tmp[$1.0].append($1.1)
return tmp
})
}
func recursiveVisit(_ node: TreeNode?) -> [(Int, Int)]{
// [(Int, Int)]
// depth, node.val
guard let node = node else{
return
}
var nodes = [(Int, Int)]()
nodes.append((0, node.val))
let lhs = recursiveVisit(node.left).map {
return ($0.0 + 1, $0.1)
}
let rhs = recursiveVisit(node.right).map {
return ($0.0 + 1, $0.1)
}
nodes.append(contentsOf: lhs)
nodes.append(contentsOf: rhs)
return nodes
}
The solution is very intuitive, collect the nodes' value and depth.Then reduce to the answer.
Not well designed as the Java Solution
My question is mainly on the Swift syntax.
Get the info, first reduce to the count , then reduce to the collection.
Is there any other way to do it more lean? Combine the two reduce to one.
programming-challenge swift
programming-challenge swift
asked 4 mins ago
dengAprodengApro
147110
147110
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f213423%2fswift-syntax-102-binary-tree-level-order-traversal%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f213423%2fswift-syntax-102-binary-tree-level-order-traversal%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown