Как рекурсивно построить бинарное дерево?

Рейтинг: 1Ответов: 1Опубликовано: 06.01.2015

Попытался сделать это тем же методом, что использовал на С++, и сразу обнаружил, что указатели здесь являются сомнительной экзотикой.

Предполагается такой принцип. Создаю структуру (или класс) с указателями:

struct tNode {
    string oper;
    tNode left;
    tNode right;
}

Объявляю корень и затем заполняю с помощью функции:

void buildTree (string str, tNode node) {
    //разбираю строку и достаю из неё содержимое для текущего узла
    //заношу в узел

    //при срабатывании некоторого условия:
    str1 = //некая подстрока;
    str2 = //некая подстрока;
    buildTree (str1, node.left);
    buildTree (str2, node.right);
}

Собственно, посоветуйте, как реализовать подобный алгоритм на C#.

Ответы

▲ 2Принят

Я давно на C# не писал. Но дерево строится подобным образом.

class Node{
  //Поля открытые для простоты.
  public string oper;
  public Node left; 
  public Node right;
  public void build( string str ){
     //условия и прочее.
     var newNode = new Node();
     newNode.oper = "something";
     this.left = newNode;
     newNode.build( 'newString' );
  }
}

Вот рабочий вариант

class Node{
        public string oper;
        public Node left;
        public Node right;

        public void build( string str ){
                if ( str == "" ) return;
                var newnode = new Node();
                this.oper = str;
                if ( str[0] == 'a' ){
                        this.left = newnode;
                } else {
                        this.right = newnode;
                    }                
                newnode.build( str.Substring(1) );                
            }

        public void print(){               
               if ( this.left != null )
                this.left.print(); 
                Console.WriteLine(this.oper);                
               if ( this.right != null ) 
                this.right.print();            
            }

    }
var x = new Node();
x.build("abababaa");
x.print();