Guest User

Untitled

a guest
Oct 16th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. function binaryTreeTraverse (inputArr = [], way = 'in') {
  2. let root = null
  3.  
  4. function Node (key) {
  5. this.key = key
  6. this.left = null
  7. this.right = null
  8. }
  9.  
  10. function insertNode (node, newNode) {
  11. if (newNode.key < node.key) {
  12. node.left === null ? (node.left = newNode) : (insertNode(node.left, newNode))
  13. } else {
  14. node.right === null ? (node.right = newNode) : (insertNode(node.right, newNode))
  15. }
  16. }
  17.  
  18. function insert (item) {
  19. const newNode = new Node(item)
  20. if (root === null) {
  21. root = newNode
  22. } else {
  23. insertNode(root, newNode)
  24. }
  25. }
  26.  
  27. inputArr.forEach(item => {
  28. insert(item)
  29. })
  30. inputArr.length = 0
  31.  
  32. function pushEle (node) {
  33. if (node !== null) {
  34. if (way === 'pre') {
  35. inputArr.push(node.key)
  36. pushEle(node.left)
  37. pushEle(node.right)
  38. } else if (way === 'in') {
  39. pushEle(node.left)
  40. inputArr.push(node.key)
  41. pushEle(node.right)
  42. } else if (way === 'post') {
  43. pushEle(node.left)
  44. pushEle(node.right)
  45. inputArr.push(node.key)
  46. }
  47. }
  48. }
  49.  
  50. function invertTree (root) {
  51. if (root === null){
  52. return root
  53. }
  54. const tmp = root.left
  55. root.left = root.right
  56. root.right = tmp
  57. if (root.left !== null){
  58. invertTree(root.left)
  59. }
  60. if (root.right !== null){
  61. invertTree(root.right)
  62. }
  63. return root
  64. }
  65.  
  66. invertTree(root)
  67. pushEle(root)
  68.  
  69. return inputArr
  70. }
  71. binaryTreeTraverse([8, 3, 10, 1, 6, 14, 4, 7, 13])
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82. function BinaryTree () {
  83. let root = null
  84.  
  85. function Node (key) {
  86. this.key = key
  87. this.left = null
  88. this.right = null
  89. }
  90.  
  91. function insertNode (node, newNode) {
  92. if (newNode.key < node.key) {
  93. node.left === null ? (node.left = newNode) : (insertNode(node.left, newNode))
  94. } else {
  95. node.right === null ? (node.right = newNode) : (insertNode(node.right, newNode))
  96. }
  97. }
  98.  
  99. this.insert = (key) => {
  100. const newNode = new Node(key)
  101. if (root === null) {
  102. root = newNode
  103. } else {
  104. insertNode(root, newNode)
  105. }
  106. }
  107.  
  108. function preOrderTraverseNode (node, callback) {
  109. if (node !== null) {
  110. callback(node.key)
  111. preOrderTraverseNode(node.left, callback)
  112. preOrderTraverseNode(node.right, callback)
  113. }
  114. }
  115. function inOrderTraverseNode (node, callback) {
  116. if (node !== null) {
  117. callback(node.key)
  118. inOrderTraverseNode(node.left, callback)
  119. inOrderTraverseNode(node.right, callback)
  120. }
  121. }
  122. function postOrderTraverseNode (node, callback) {
  123. if (node !== null) {
  124. callback(node.key)
  125. postOrderTraverseNode(node.left, callback)
  126. postOrderTraverseNode(node.right, callback)
  127. }
  128. }
  129.  
  130. this.preOrderTraverse = (callback) => {
  131. preOrderTraverseNode(root, callback)
  132. }
  133. this.inOrderTraverse = (callback) => {
  134. inOrderTraverseNode(root, callback)
  135. }
  136. this.postOrderTraverse = (callback) => {
  137. postOrderTraverseNode(root, callback)
  138. }
  139. }
  140.  
  141. const arr = [8, 3, 10, 1, 6, 14, 4, 7, 13]
  142. const cb = (...obj) => console.log(...obj)
  143. const bT = new BinaryTree()
  144. arr.forEach(item => bT.insert(item))
  145. bT.preOrderTraverse(cb)
  146. bT.inOrderTraverse(cb)
  147. bT.postOrderTraverse(cb)
Add Comment
Please, Sign In to add comment