通过插入镜像BST



在C中编写一个函数来创建一个新的BST,它是给定树的镜像。

我想到了一个解决这个问题的实现,它只从原始树中复制根节点,然后通过DFS遍历发现新节点,并使用不同的比较函数将它们插入到新的镜像树中(即,在遍历和插入节点时使用>而不是<(。

我的问题是:这种方法在任何情况下都有效吗?我想是的,但我想知道是否有我的解决方案不起作用的情况(或者是否有更好的解决方案(。

递归解决方案:镜像左和右子级,并将它们分别分配为镜像节点的右和左子级。下面的代码(调用mirrorTree(root(执行(:

class Node:
  def __init__(self, val, left, right):
    self.val=val
    self.left=left
    self.right=right
def mirrorTree(node):
  new_node=None
  if node:
    new_node=Node(node.val, mirrorTree(node.right), mirrorTree(node.left))
  return new_node

答案与gen-y-s相同,但仅在C.中

    node *create_empty()
    {
            node *temp = malloc(sizeof(*temp));
            temp->left = left;
            temp->right = right;
            return temp;
    }
    node *add_detail(int value, node *left, node *right)
    {
            temp->value = value;
            temp->left = left;
            temp->right = right;
            return temp;
    }
    node *mirror(node *p)
    {
            if (p) {
                    node = create_empty();
                    node = add_detail(p->value, mirror(p->right), mirror(p->left));
            }
            return node;
    }

最新更新