Left-Child Right-Sibling переместить родного брата в дочерний узел? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть, например, дерево правого брата левого ребенка: enter image description here

Если, например, я хочу сделать E (включая его дочерние узлы E, K, L , P, Q) дочерний узел H. Таким образом, H будет содержать N, O, E (и его дочерние элементы). Я намереваюсь добавить дочерние элементы в родительский узел, затем удалить старые узлы, но затем появятся новые пары родительские-дочерние элементы. Какой кратчайший путь для этого?

Вот код для воспроизведения:

#include<bits/stdc++.h> 
#include<iostream>
using namespace std; 

struct Node 
{ 
    string data; 
    struct Node *next; 
    struct Node *child; 
}; 

// Creating new Node 
Node* newNode(string data) 
{ 
    Node *newNode = new Node; 
    newNode->next = newNode->child = NULL; 
    newNode->data = data; 
    return newNode; 
} 

// Adds a sibling to a list with starting with n 
Node *addSibling(Node *n, string data) 
{ 
    if (n == NULL) 
        return NULL; 

    while (n->next) 
        n = n->next; 

    return (n->next = newNode(data)); 
} 

// Add child Node to a Node 
Node *addChild(Node * n, string data) 
{ 
    if (n == NULL) 
        return NULL; 

    // Check if child list is not empty. 
    if (n->child) 
        return addSibling(n->child, data); 
    else
        return (n->child = newNode(data)); 
} 

// Traverses tree in level order 
void traverseTree(Node * root) 
{ 
    if (root == NULL) 
        return; 

    while (root) 
    { 
        cout << " " << root->data; 
        if (root->child) 
            traverseTree(root->child); 
        root = root->next; 
    } 
} 

//Driver code 

int main() 
{ 

    Node *root = newNode("A"); 
    Node *nB  = addChild(root, "B"); 
    Node *nC  = addChild(root, "C"); 
    Node *nD  = addChild(root, "D"); 
    Node *nE  = addChild(root, "E"); 
    Node *nF  = addChild(root, "F"); 
    Node *nG  = addChild(root, "G"); 
    Node *nH  = addChild(nB, "H"); 
    Node *nI  = addChild(nB, "I"); 
    Node *nJ  = addChild(nB, "J"); 
    Node *nK  = addChild(nE, "K"); 
    Node *nL  = addChild(nE, "L");
    Node *nM  = addChild(nG, "M"); 
    Node *nN  = addChild(nH, "N"); 
    Node *nO  = addChild(nH, "O");
    Node *nP  = addChild(nK, "P"); 
    Node *nQ  = addChild(nL, "Q");
    traverseTree(root); 
    return 0; 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...