tree_traversal.sf 598 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. func preorder(t) {
  3. t ? [t[0], __FUNC__(t[1])..., __FUNC__(t[2])...] : [];
  4. }
  5. func inorder(t) {
  6. t ? [__FUNC__(t[1])..., t[0], __FUNC__(t[2])...] : [];
  7. }
  8. func postorder(t) {
  9. t ? [__FUNC__(t[1])..., __FUNC__(t[2])..., t[0]] : [];
  10. }
  11. func depth(t) {
  12. var a = [t];
  13. var ret = [];
  14. while (a.len > 0) {
  15. var v = (a.shift \\ next);
  16. ret « v[0];
  17. a += [v[1,2]];
  18. };
  19. return ret;
  20. }
  21. var x = [1,[2,[4,[7]],[5]],[3,[6,[8],[9]]]];
  22. say "pre: #{preorder(x)}";
  23. say "in: #{inorder(x)}";
  24. say "post: #{postorder(x)}";
  25. say "depth: #{depth(x)}";