2013年12月16日月曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅢ部(高度なプログラミング概念)の17章(高度なポインタ)、17.7(ツリー)、17.8(ツリーの出力)、17.9(プログラムの残りの部分)、設問 17-2をDartで解いてみる。

その他参考書籍

設問 17-2

コード

sample.dart

import 'dart:html';

void main(){
  InputElement run = querySelector('#run_dart');
  InputElement clear = querySelector('#clear');
  Element pre = querySelector('#pre0');
  for(var word in words){
    t.enter(word);
  }
  run.onClick.listen((MouseEvent event){
    pre.text = window.navigator.userAgent + '\n';
    pre.text += '$t';
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

Tree t = new Tree();
List<String> words = ['able', 'baker', 'cook', 'delta', 'easy'];

class Node{
  String word;
  Node left;
  Node right;
  Node(String word){
    this.word = word;
    this.left = null;
    this.right = null;
  }
}

class Tree{
  Node top;
  Tree(){
    this.top = null;
  }
  void enter(String word){
    this.top = _enter(this.top, word);
  }
  Node _enter(Node node, String word){
    if(node == null){
      node = new Node(word);
    } else if(node.word.compareTo(word) < 0){
      node.right = _enter(node.right, word);
    } else if(node.word.compareTo(word) > 0){
      node.left = _enter(node.left, word);
    }
    return node;
  }
  String toString(){
    return _printTree(top, 0);
  }
  String _printTree(Node node, int n){
    if(node == null){
      return '';
    }
    return _printTree(node.left, n + 1) +
        new List.filled(n, '  ').join() + node.word + '\n' +
        _printTree(node.right, n + 1);
  }
}













						

0 コメント:

コメントを投稿