image.png

1️⃣ 二叉树的前序遍历

  1. function Node(value) {
  2. this.value = value;
  3. this.left = null;
  4. this.right = null;
  5. }
  6. var a = new Node("a")
  7. var b = new Node("b")
  8. var c = new Node("c")
  9. var d = new Node("d")
  10. var e = new Node("e")
  11. var f = new Node("f")
  12. var g = new Node("g")
  13. var h = new Node("h")
  14. var i = new Node("i")
  15. var j = new Node("j")
  16. var k = new Node("k")
  17. a.left = b;
  18. a.right = c;
  19. b.left = d;
  20. b.right = e;
  21. c.left = f;
  22. c.right = g;
  23. d.left = h;
  24. d.right = i;
  25. g.left = j;
  26. g.right = k;
  27. function fun(root) {
  28. if (root == null || root.length == 0) return;
  29. console.log(root.value);
  30. fun(root.left);
  31. fun(root.right);
  32. }
  33. fun(a); // a b d h i e c f g j k

1️⃣ 二叉树的中序遍历

  1. function Node(value) {
  2. this.value = value;
  3. this.left = null;
  4. this.right = null;
  5. }
  6. var a = new Node("a")
  7. var b = new Node("b")
  8. var c = new Node("c")
  9. var d = new Node("d")
  10. var e = new Node("e")
  11. var f = new Node("f")
  12. var g = new Node("g")
  13. var h = new Node("h")
  14. var i = new Node("i")
  15. var j = new Node("j")
  16. var k = new Node("k")
  17. a.left = b;
  18. a.right = c;
  19. b.left = d;
  20. b.right = e;
  21. c.left = f;
  22. c.right = g;
  23. d.left = h;
  24. d.right = i;
  25. g.left = j;
  26. g.right = k;
  27. function fun(root) {
  28. if (root == null || root.length == 0) return;
  29. fun(root.left);
  30. console.log(root.value);
  31. fun(root.right);
  32. }
  33. fun(a); // h d i b e a f c j g k

1️⃣ 二叉树的后序遍历

  1. function Node(value) {
  2. this.value = value;
  3. this.left = null;
  4. this.right = null;
  5. }
  6. var a = new Node("a")
  7. var b = new Node("b")
  8. var c = new Node("c")
  9. var d = new Node("d")
  10. var e = new Node("e")
  11. var f = new Node("f")
  12. var g = new Node("g")
  13. var h = new Node("h")
  14. var i = new Node("i")
  15. var j = new Node("j")
  16. var k = new Node("k")
  17. a.left = b;
  18. a.right = c;
  19. b.left = d;
  20. b.right = e;
  21. c.left = f;
  22. c.right = g;
  23. d.left = h;
  24. d.right = i;
  25. g.left = j;
  26. g.right = k;
  27. function fun(root) {
  28. if (root == null || root.length == 0) return;
  29. fun(root.left);
  30. fun(root.right);
  31. console.log(root.value);
  32. }
  33. fun(a); // h i d e b f j k g c a

1️⃣ 根据前序中序还原二叉树

前序结果:a b d h i e c f g j k
中序结果:h d i b e a f c j g k

  1. const qian = ['a', 'b', 'd', 'h', 'i', 'e', 'c', 'f', 'g', 'j', 'k'];
  2. const zhong = ['h', 'd', 'i', 'b', 'e', 'a', 'f', 'c', 'j', 'g', 'k'];
  3. const hou = ['h', 'i', 'd', 'e', 'b', 'f', 'j', 'k', 'g', 'c', 'a'];
  4. function Node(value) {
  5. this.value = value;
  6. this.left = null;
  7. this.right = null;
  8. }
  9. function fun(qian, zhong) {
  10. if (qian == null || zhong == null || qian.length == 0 || zhong.length == 0)
  11. return null;
  12. var root = new Node(qian[0]);
  13. var index = zhong.indexOf(root.value); // 找到根节点在中序遍历中的位置
  14. var qianLeft = qian.slice(1, 1 + index); // 前序遍历的左子树
  15. var qianRight = qian.slice(1 + index, qian.length); // 前序遍历的右子树
  16. var zhongLeft = zhong.slice(0, index); //中序遍历的左子树
  17. var zhongRight = zhong.slice(index + 1, zhong.length); // 中序遍历的右子树
  18. root.left = fun(qianLeft, zhongLeft); // 根据左子树的前序和中序还原左子树并赋值给 root.left
  19. root.right = fun(qianRight, zhongRight); // 根据右子树的前序和中序还原右子树并赋值给 root.right
  20. return root;
  21. }
  22. var root = fun(qian, zhong);
  23. console.log(root);

1️⃣ 根据中序后序还原二叉树

中序结果:h d i b e a f c j g k
后序结果: h i d e b f j k g c a