2016-02-09 4 views
0

У меня есть два дерева, как эти: enter image description hereКак вставить дерево в другое дерево в C#

Я хочу, чтобы вставить второе дерево в первое дерево в узле, который имеет такое же имя его корень и прикрепить дочерние элементы этого узла слева - большинство дочерних элементов второго дерева.

Я пробовал:

PTree attachPoint = chain.Find(x => x.Val == RTree.Val); 


    if (attachPoint != null) 
    { 
     foreach (var c in attachPoint.Childs) 
     { 
      RTree.Left.Childs.Add(c); 
     } 
     attachPoint = RTree; 
    } 
    else 
    { 
     RTree.Left.Childs.Add(root); 
     root = RTree; 
    } 

Здесь RTree это второе дерево и root указывает на корень первого дерева и chain держит ветвь от корня «А» до «D». Но кажется, что желаемое дерево не построено. Я сделал это правильно?

+0

Каково максимальное количество дочерних узлов узла? Это не похоже на двоичное дерево, но узел содержит «Left»-child-node. Выглядит странно. –

+0

@Verarind вы можете предположить, что «RTree», второй ребенок, является двоичным, а 'Left' фактически является childs [1], а' Right' - 'childs [0]' – Ahmad

ответ

1

Было бы проще помочь, если бы вы включили основные части вашего класса PTree. Вот что я мог бы предложить вам на основе опубликованного кода:

PTree attachPoint = chain.Find(x => x.Val == RTree.Val); 

if (attachPoint != null) 
{ 
    foreach (var c in attachPoint.Childs) 
    { 
     RTree.Left.Childs.Add(c); 
    } 
    // Here you either have to find the attachPoint parent and 
    // replace attachPoint with RTree in parent.Childs, 
    // or make attachPoint.Childs to be RTree.Childs as below 
    attachPoint.Childs.Clear(); 
    foreach (var c in RTree.Childs) 
    { 
     attachPoint.Childs.Add(c); 
    } 
} 
else 
{ 
    RTree.Left.Childs.Add(root); 
    root = RTree; 
} 
1

attachPointroot?) - это только локальные переменные, поэтому attachPoint = RTree; не повлияет на структуру дерева. Вам нужно найти левое дерево, чтобы найти родительский узел точки вставки, а затем изменить родительский узел таким образом, чтобы parent.Right = attachPoint;

Смежные вопросы