Зеркальное изображение бинарного дерева - PullRequest
11 голосов
/ 06 декабря 2010

Предположим, есть дерево:

             1
            / \
           2   3
              / \
             4   5

Тогда зеркальное отображение будет:

              1
             / \
            3   2
           / \
          5   4

Предположим, что узлы имеют следующую структуру:

struct node{
      node left;
      node right;
      int value;
}

Может кто-нибудь предложить алгоритм для этого?

Ответы [ 13 ]

0 голосов
/ 31 марта 2014
struct node *MirrorOfBinaryTree( struct node *root)
{ struct node *temp;
if(root)
{
MirrorOfBinaryTree(root->left);
MirrorOfBinaryTree(root->right);
/*swap the pointers in this node*/
temp=root->right;
root->right=root->left;;
root->left=temp;
}
return root;
}

Сложность времени: O (n) Сложность пространства: O (n)

0 голосов
/ 27 декабря 2013

рекурсивный код Java

public class TreeMirrorImageCreator {

public static Node createMirrorImage(Node originalNode,Node mirroredNode){

    mirroredNode.setValue(originalNode.getValue());

    if(originalNode.getLeft() != null){
        mirroredNode.setLeft(createMirrorImage(originalNode.getRight(),new Node(0)));
    }

    if(originalNode.getRight() != null){
        mirroredNode.setRight(createMirrorImage(originalNode.getLeft(), new Node(0)));
    }

    return mirroredNode;

}
}
0 голосов
/ 26 июня 2012

Вот моя функция.Предложите, если есть лучшее решение:

void mirrorimage(struct node *p)
{
    struct node *q;
    if(p!=NULL)
    {
        q=swaptrs(&p);
        p=q;
        mirrorimage(p->left);
        mirrorimage(p->right);
    }
}

struct node* swaptrs(struct node **p)
{
    struct node *temp;
    temp=(*p)->left;
    (*p)->left=(*p)->right;
    (*p)->right=temp;
    return (*p);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...