<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      如何直觀形象地樹狀打印一棵二叉樹?

      網上絕大部分的二叉樹打印效果都十分潦草,也不夠直觀形象,最近自己用JS寫了個圖形化小工具BinaryTreeGraph,也用Java寫了個打印器BinaryTreePrinter,還有個Objective-C版本BinaryTreePrinterOC
      具體代碼實現請看github

      BinaryTreeGraph(JS版)

      二叉樹

      二叉搜索樹

      AVL樹

      紅黑樹

      二叉堆

      BinaryTreePrinter(Java版)

      簡介

      • 樹狀打印一棵二叉樹
      • 比如輸入一棵二叉搜索樹
        • [381, 12, 410, 9, 40, 394, 540, 35, 190, 476, 760, 146, 445, 600, 800]
      • 就會輸出

      • 或者輸出

      核心API

      public final class BinaryTrees {
          // 打印一棵二叉樹
          public static void print(BinaryTreeInfo tree);
          public static void print(BinaryTreeInfo tree, PrintStyle style);
      
          // 打印一棵二叉樹(打印完自動換行)
          public static void println(BinaryTreeInfo tree);
          public static void println(BinaryTreeInfo tree, PrintStyle style);
      
          // 獲得一棵二叉樹的打印字符串
          public static String printString(BinaryTreeInfo tree);
          public static String printString(BinaryTreeInfo tree, PrintStyle style);
      
          // 可選的打印樣式
          public enum PrintStyle {
              LEVEL_ORDER, 
              INORDER
          }
      }
      

      示例

      實現BinaryTreeInfo

      • 根節點是誰?
      • 如何查找左節點?
      • 如何查找右節點?
      • 如何打印單個節點?
      /**
      * BinarySearchTree是你自己編寫的二叉樹類
      */
      public class BinarySearchTree<E> implements BinaryTreeInfo {
          /**這里省略了大量代碼,只貼出了脈絡代碼**/
          
          private Node<E> root;
          private static class Node<E> {
              E element;
              Node<E> left;
              Node<E> right;
          }
          
          /********** BinaryTreeInfo **********/
          @Override
          public Object root() {
              // 根節點是誰?
              return root;
          }
      
          @Override
          public Object left(Object node) {
              // 如何查找左節點?
              return ((Node<E>) node).left;
          }
      
          @Override
          public Object right(Object node) {
              // 如何查找右節點?
              return ((Node<E>) node).right;
          }
      
          @Override
          public Object string(Object node) {
              // 如何打印單個節點?
              return ((Node<E>) node).element;
          }
          /********** BinaryTreeInfo **********/
      }
      

      打印

      // 隨機生成的一棵二叉搜索樹(random generation)
      BinarySearchTree<Integer> bst = ...;
      
      // PrintStyle.LEVEL_ORDER(層序打印)
      BinaryTrees.println(bst); 
      
      // PrintStyle.INORDER(中序打印)
      BinaryTrees.println(bst, PrintStyle.INORDER);
      

      PrintStyle.LEVEL_ORDER

      PrintStyle.INORDER

      生成字符串寫入文件

      Files.writeToFile("F:/test/bst.txt", BinaryTrees.printString(bst));
      

      不需要定義二叉樹類

      BinaryTrees.println(new BinaryTreeInfo() {
          @Override
          public Object root() {
              return 8;
          }
      
          @Override
          public Object left(Object node) {
              if (node.equals(8)) return 3;
              if (node.equals(3)) return 1;
              if (node.equals(6)) return 4;
              if (node.equals(14)) return 13;
              return null;
          }
      
          @Override
          public Object right(Object node) {
              if (node.equals(8)) return 10;
              if (node.equals(10)) return 14;
              if (node.equals(3)) return 6;
              if (node.equals(6)) return 7;
              return null;
          }
          
          @Override
          public Object string(Object node) {
              return node;
          }
      });
      
      BinaryTrees.println(new BinaryTreeInfo() {
          @Override
          public Object root() {
              return "Life";
          }
          
          @Override
          public Object left(Object node) {
              if (node.equals("Life")) return "Animal";
              if (node.equals("Person")) return "Man";
              if (node.equals("Animal")) return "Cat";
              if (node.equals("Dog")) return "Teddy";
              return null;
          }
          
          @Override
          public Object right(Object node) {
              if (node.equals("Life")) return "Person";
              if (node.equals("Person")) return "Woman";
              if (node.equals("Animal")) return "Dog";
              if (node.equals("Dog")) return "SingleDog";
              return null;
          }
          
          @Override
          public Object string(Object node) {
              return node;
          }
      });
      

      二叉堆

      public class BinaryHeap<E> implements BinaryTreeInfo {
          private int size;
          private E[] elements;
      
          @Override
          public Object root() {
              return 0;
          }
      
          @Override
          public Object left(Object node) {
              int index = ((int) node << 1) + 1;
              return index >= size ? null : index;
          }
      
          @Override
          public Object right(Object node) {
              int index = ((int) node << 1) + 2;
              return index >= size ? null : index;
          }
      
          @Override
          public Object string(Object node) {
              return elements[(int) node];
          }
      }
      
      BinaryHeap<Integer> heap = new BinaryHeap<>();
      for (int i = 0; i < 10; i++) {
          heap.add((int) (Math.random() * 100));
      }
      BinaryTrees.println(heap);
      

      BinaryTreePrinterOC

      • 實現MJBinaryTreeInfo協議
      @interface MJBSTNode : NSObject {
      @public
          id _element;
          MJBSTNode *_left;
          MJBSTNode *_right;
      }
      @end
      
      @interface MJBinarySearchTree : NSObject <MJBinaryTreeInfo>
      @end
      
      @interface MJBinarySearchTree() {
          MJBSTNode *_root;
      }
      @end
      
      @implementation MJBinarySearchTree
      #pragma mark - MJBinaryTreeInfo
      - (id)left:(MJBSTNode *)node {
          return node->_left;
      }
      
      - (id)right:(MJBSTNode *)node {
          return node->_right;
      }
      
      - (id)string:(MJBSTNode *)node {
          return node->_element;
      }
      
      - (id)root {
          return _root;
      }
      @end
      
      • 打印
      [MJBinaryTrees println:bst];
      
      [MJBinaryTrees println:bst style:MJPrintStyleLevelOrder];
      
      [MJBinaryTrees println:bst style:MJPrintStyleInorder];
      
      NSString *str = [MJBinaryTrees printString:bst];
      NSString *file = @"/Users/mj/Desktop/1.txt";
      [str writeToFile:file atomically:YES encoding:NSUTF8StringEncoding error:nil];
      
      posted @ 2019-03-30 16:27  M了個J  閱讀(15865)  評論(10)    收藏  舉報
      主站蜘蛛池模板: 无码AV无码免费一区二区| 精品国产一区二区在线视| 国内精品亚洲成av人片| 欧美久久精品一级c片免费| 灵寿县| 久久精产国品一二三产品| 亚洲综合日韩av在线| 欧美va天堂在线电影| 在线精品视频一区二区| 午夜大尺度福利视频一区| 欧美精品一区二区三区在线观看| 国产普通话对白刺激| 亚洲一区二区三区在线| 国产精品亚洲А∨怡红院| 十八禁日本一区二区三区| 激情动态图亚洲区域激情| 色狠狠色婷婷丁香五月| 亚洲熟妇丰满多毛xxxx| 九九热在线精品视频99| 亚洲综合一区国产精品| 在线观看国产精品日韩av| 日韩高清免费一码二码三码| 国产精品有码在线观看| 99精品全国免费观看视频| 熟女人妻aⅴ一区二区三区电影 | 欧美肥老太交视频免费| 亚洲欧美综合人成在线| 亚洲国产熟女一区二区三区 | 国产精品午夜福利视频| 国产妇女馒头高清泬20p多| 丁香五月天综合缴情网| 成人又黄又爽又色的视频| 婺源县| 成人福利一区二区视频在线| 亚洲免费人成在线视频观看| 精品九九人人做人人爱| 国产精品内射在线免费看| 大桥未久亚洲无av码在线| 人人妻人人做人人爽夜欢视频| 粉嫩一区二区三区精品视频| h动态图男女啪啪27报gif|