Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func mergeBinaryTrees(node1: TreeNode?, node2: TreeNode?) -> TreeNode? {
- if (node1 == null) return node2
- if (node2 == null) return node1
- var stack1 = [TreeNode?]()
- var stack2 = [TreeNode?]()
- stack1.append(node1)
- stack2.append(node2)
- while !stack1.isEmpty || !stack2.isEmpty {
- let curr1: TreeNode! = stack1.popLast()!
- let curr2: TreeNode! = stack2.popLast()!
- let dummy = curr1
- dummy?.value = curr1.value + curr2.value
- if curr1.left == nil || curr2.left == nil {
- dummy?.left = curr1.left == nil ? curr2.left : curr1.left
- } else if curr1.left != nil && curr2.left != nil {
- stack1.append(curr1.left)
- stack2.append(curr2.left)
- }
- if curr1.right == nil || curr2.right == nil {
- dummy?.right = curr1.right == nil ? curr2.right : curr1.right
- } else if curr1.right != nil && curr2.right != nil {
- stack1.append(curr1.right)
- stack2.append(curr2.right)
- }
- }
- return node1
- }
- let node4 = TreeNode(value: 4, left: nil, right: nil)
- let node5 = TreeNode(value: 5, left: nil, right: nil)
- let node6 = TreeNode(value: 6, left: nil, right: nil)
- let node2 = TreeNode(value: 2, left: node4, right: node5)
- let node3 = TreeNode(value: 3, left: nil, right: node6)
- let node1 = TreeNode(value: 1, left: node2, right: node3)
- let node3b = TreeNode(value: 3, left: nil, right: nil)
- let node2b = TreeNode(value: 2, left: nil, right: nil)
- let node6b = TreeNode(value: 6, left: nil, right: nil)
- let node1b = TreeNode(value: 1, left: node3b, right: nil)
- let node7 = TreeNode(value: 7, left: node2b, right: node6b)
- let node4b = TreeNode(value: 4, left: node1b, right: node7)
- let node = mergeBinaryTrees(node1: node1, node2: node4b)
- func inorder(node: TreeNode?) {
- if node == nil {
- return
- }
- inorder(node: node?.left)
- print(node?.value)
- inorder(node: node?.right)
- }
- inorder(node: node)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement